// ObjectDataSource kräver att en Delete-metod /// <summary> /// Tar bort specifierad comment ur databasen. /// </summary> /// <param name="comment">Kontaktuppgift som ska tas bort.</param> public void DeleteComment(Comment comment) { // med en parameter av typen Member. CommentDAL.DeleteComment(comment.CommentId); }
/// <summary> /// Uppdaterar en kunds kontaktuppgifter i tabellen Post. /// </summary> /// <param name="member">KOntaktuppgift som ska uppdateras.</param> public void UpdateComment(Comment comment) { // 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("app.uspUpdateComment", 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("@CommentId", MySqlDbType.Int32, 4).Value = comment.CommentId; cmd.Parameters.Add("@PostId", MySqlDbType.Int32, 4).Value = comment.PostId; cmd.Parameters.Add("@MemberId", MySqlDbType.Int32, 4).Value = comment.MemberId; cmd.Parameters.Add("@Value", MySqlDbType.VarChar, 500).Value = comment.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> /// Spara en kontaktuppgift i databasen. /// </summary> /// <param name="member">KOntaktuppgifter som ska sparas.</param> public void SaveComment(Comment comment) { if (comment.IsValid) { // Post-objektet sparas antingen genom att en ny post // skapas eller genom att en befintlig post uppdateras. if (comment.PostId == 0) // Ny post om PostID är 0! { CommentDAL.InsertComment(comment); } else { CommentDAL.UpdateComment(comment); } } 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(comment.Error); ex.Data.Add("Comment", comment); throw ex; } }
/// <summary> /// Skapar en ny post i tabellen Post. /// </summary> /// <param name="member">Kontaktuppgift som ska läggas till.</param> public void InsertComment(Comment comment) { // 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("app.uspInsertComment", 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("@MemberId", MySqlDbType.Int32, 4).Value = comment.MemberId; cmd.Parameters.Add("@PostId", MySqlDbType.Int32, 4).Value = comment.PostId; cmd.Parameters.Add("@Value", MySqlDbType.VarChar, 500).Value = comment.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("@CommentId", 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. comment.CommentId = (int)cmd.Parameters["@CommentId"].Value; } catch { // Kastar ett eget undantag om ett undantag kastas. throw new ApplicationException(GenericErrorMessage); } } }