/// <summary> /// Uppdaterar en kunds kontaktuppgifter i tabellen Post. /// </summary> /// <param name="member">KOntaktuppgift som ska uppdateras.</param> public void UpdatePost(Post post) { // Skapar ett anslutningsobjekt. using (MySqlConnection conn = CreateConnection()) { try { // Skapar och initierar ett SqlCommand-objekt som används till att // exekveras specifierad lagrad procedur. MySqlCommand cmd = new MySqlCommand("UpdatePost", conn); cmd.CommandType = CommandType.StoredProcedure; // Lägger till de paramterar den lagrade proceduren kräver. Använder här det effektiva sätttet att // göra det på - något "svårare" men ASP.NET behöver inte "jobba" så mycket. cmd.Parameters.Add("@PostId", MySqlDbType.Int32, 4).Value = post.PostId; cmd.Parameters.Add("@MemberId", MySqlDbType.Int32, 4).Value = post.MemberId; cmd.Parameters.Add("@Value", MySqlDbType.VarChar, 500).Value = post.Value; // Öppnar anslutningen till databasen. conn.Open(); // Den lagrade proceduren innehåller en UPDATE-sats och returnerar inga poster varför metoden // ExecuteNonQuery används för att exekvera den lagrade proceduren. cmd.ExecuteNonQuery(); } catch { // Kastar ett eget undantag om ett undantag kastas. throw new ApplicationException(GenericErrorMessage); } } }
/// <summary> /// Skapar en ny post i tabellen Post. /// </summary> /// <param name="member">Kontaktuppgift som ska läggas till.</param> public void InsertPost(Post post) { // Skapar ett anslutningsobjekt. using (MySqlConnection conn = CreateConnection()) { try { // Skapar och initierar ett SqlCommand-objekt som används till att // exekveras specifierad lagrad procedur. MySqlCommand cmd = new MySqlCommand("InsertPost", conn); cmd.CommandType = CommandType.StoredProcedure; // Lägger till de paramterar den lagrade proceduren kräver. Använder här det effektiva sätttet att // göra det på - något "svårare" men ASP.NET behöver inte "jobba" så mycket. cmd.Parameters.Add("@Id", MySqlDbType.Int32, 4).Value = post.MemberId; cmd.Parameters.Add("@Value", MySqlDbType.VarChar, 500).Value = post.Value; // Den här parametern är lite speciell. Den skickar inte något data till den lagrade proceduren, // utan hämtar data från den. (Fungerar ungerfär som ref- och out-prameterar i C#.) Värdet // parametern kommer att ha EFTER att den lagrade proceduren exekverats är primärnycklens värde // den nya posten blivit tilldelad av databasen. cmd.Parameters.Add("@PostId", MySqlDbType.Int32, 4).Direction = ParameterDirection.Output; // Öppnar anslutningen till databasen. conn.Open(); // Den lagrade proceduren innehåller en INSERT-sats och returnerar inga poster varför metoden // ExecuteNonQuery används för att exekvera den lagrade proceduren. cmd.ExecuteNonQuery(); // Hämtar primärnyckelns värde för den nya posten och tilldelar Member-objektet värdet. //Varför får jag null-värde här? Har ingen out parameter för postid post.PostId = (int)cmd.Parameters["@PostId"].Value; } catch { // Kastar ett eget undantag om ett undantag kastas. throw new ApplicationException(GenericErrorMessage); } } }
public SavedEventArgs(Post post) { Post = post; }
protected void SaveButton_Click(object sender, EventArgs e) { // Om valideringen är OK så... if (Page.IsValid) { try { // ...skapa ett nytt Member-objekt och initiera det // med värdena från textfälten och... Post post = new Post { MemberId = MemberId, Value = Value, PostId = PostId }; // ...veriferera att objektet uppfyller affärsreglerna... if (!post.IsValid) { // ...visa felmeddelanden om vad som // orsakade att valideringen misslyckades. AddErrorMessage(post); return; } // ...spara objektet. Service service = new Service(); service.SavePost(post); // Om någon abbonerar på händelsen Saved... if (Saved != null) { // ...utlöses händelsen Saved och skickar med // en referens till kunduppgifterna som sparats. Saved(this, new SavedEventArgs(post)); } } catch { // ...visas ett felmeddelande. AddErrorMessage(Strings.Post_Inserting_Error); } } }
// ObjectDataSource kräver att en Delete-metod // http://en.wikipedia.org/wiki/Create,_read,_update_and_delete /// <summary> /// Tar bort specifierad kontaktuppgift ur databasen. /// </summary> /// <param name="post">Kontaktuppgift som ska tas bort.</param> public void DeletePost(Post post) { // med en parameter av typen Member. PostDAL.DeletePost(post.PostId); }
/// <summary> /// Spara en kontaktuppgift i databasen. /// </summary> /// <param name="member">KOntaktuppgifter som ska sparas.</param> public void SavePost(Post post) { if (post.IsValid) { // Post-objektet sparas antingen genom att en ny post // skapas eller genom att en befintlig post uppdateras. if (post.PostId == 0) // Ny post om PostID är 0! { PostDAL.InsertPost(post); } else { PostDAL.UpdatePost(post); } } else { // Uppfyller inte objektet affärsreglerna kastas ett undantag med // ett allmänt felmeddelande samt en referens till objektet som // inte klarade valideringen. ApplicationException ex = new ApplicationException(post.Error); ex.Data.Add("Post", post); throw ex; } }