ASP.NET Tutorial/ADO.net Database/SqlTransaction
Local Transactions
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="LocalTransactions" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server">
<title>Local Transactions</title>
</head> <body>
<form id="form1" runat="server">
Local Transactions
This example illustrates how to use local transactions with ADO.NET. <asp:Label ID="labMsg" runat="server" />
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class LocalTransactions : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { ModifyData(); } private void ModifyData() { string connString = ConfigurationManager.ConnectionStrings["Book"].ConnectionString; int pubIdToDelete = 9; SqlConnection conn = new SqlConnection(connString); SqlTransaction trans = null; try { conn.Open(); trans = conn.BeginTransaction(); string sqlA = "DELETE FROM Publishers "; sqlA += " WHERE PublisherId=@pubid"; SqlCommand cmdA = new SqlCommand(sqlA, conn, trans); cmdA.Parameters.AddWithValue("@pubId", pubIdToDelete); cmdA.ExecuteNonQuery(); string sqlB = "DELETE FROM NonExistantTable "; sqlB += " WHERE PublisherId=@pubid"; SqlCommand cmdB = new SqlCommand(sqlB, conn, trans); cmdB.Parameters.AddWithValue("@pubId", pubIdToDelete); cmdB.ExecuteNonQuery(); trans.rumit(); labMsg.Text = "Database updated successfully"; } catch (Exception ex) { labMsg.Text = "[btnUpdate_Click] "; labMsg.Text += "Error occurred accessing the database"; labMsg.Text += "
" + ex.Message; if (trans != null) { trans.Rollback(); labMsg.Text += "
" + "Changes rolled back"; } } finally { conn.Close(); conn = null; } }
}</source>