ASP.NET Tutorial/ADO.net Database/Transaction
Содержание
- 1 Execute database commands within a single local transaction. You can test rollback and partial rollback.
- 2 Click this button to display current data.
- 3 Click this button to execute a transaction
- 4 Click this button to restore the original state of data
- 5 Use transaction to group operations (VB.net)
Execute database commands within a single local transaction. You can test rollback and partial rollback.
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Begin Local Transactions</title>
</head> <body>
<form id="form1" runat="server">
Click this button to display current data.
<asp:Button id="ShowButton" runat="server" Text="Show Data" OnClick="ShowButton_Click"></asp:Button>
Click this button to execute a transaction
<asp:Button id="ExecuteButton" runat="server" Text="Execute Transaction" OnClick="ExecuteButton_Click"></asp:Button> <asp:CheckBox id="CheckBox_Partial" runat="server" Text="Partial Rollback"></asp:CheckBox>
Click this button to restore the original state of data
<asp:Button id="RestoreButton" runat="server" Text="Restore" OnClick="RestoreButton_Click"></asp:Button>
<asp:Label runat="server" id="lblMessage" />
<asp:DataGrid id="grid" runat="server" visible="False" CellPadding="4" GridLines="None" ForeColor="#333333" CssClass="shadowed" font-size="X-Small" font-names="verdana"> <AlternatingItemStyle BackColor="White" /> <ItemStyle BackColor="#EFF3FB" /> <HeaderStyle ForeColor="White" BackColor="#507CD1" Font-Bold="True" /> <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <EditItemStyle BackColor="#2461BF" /> <SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> </asp:DataGrid> </form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; public partial class Default : System.Web.UI.Page {
private const string ConnString = "SERVER=(local);DATABASE=northwind;Trusted_Connection=yes;"; private const string SelectCmd = "SELECT employeeid, firstname, lastname FROM Employees"; private const string UpdateCmd = "UPDATE Employees SET firstname="Michela" WHERE EmployeeID=1"; private const string InsertCmd = "INSERT INTO Employees (firstname,lastname) VALUES ("Dino", "Esposito")"; protected void ShowButton_Click(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(ConnString)) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.rumandText = SelectCmd; conn.Open(); grid.DataSource = cmd.ExecuteReader(); grid.DataBind(); grid.Visible = true; conn.Close(); } } protected void ExecuteButton_Click(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(ConnString)) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; conn.Open(); SqlTransaction t = conn.BeginTransaction(); cmd.Transaction = t; try { cmd.rumandText = UpdateCmd; cmd.ExecuteNonQuery(); t.Save("AfterUpdate"); cmd.rumandText = InsertCmd; cmd.ExecuteNonQuery(); if (CheckBox_Partial.Checked) t.Rollback("AfterUpdate"); t.rumit(); lblMessage.Text = "Done"; grid.Visible = false; } catch (Exception exc) { t.Rollback(); lblMessage.Text = "Error occurred: " + exc.Message; } } } protected void RestoreButton_Click(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(ConnString)) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; conn.Open(); SqlTransaction t = conn.BeginTransaction(); cmd.Transaction = t; try { cmd.rumandText = "UPDATE Employees SET firstname="Nancy" WHERE EmployeeID=1"; cmd.ExecuteNonQuery(); cmd.rumandText = "DELETE FROM Employees WHERE EmployeeID >9"; cmd.ExecuteNonQuery(); t.rumit(); lblMessage.Text = "Done"; grid.Visible = false; } catch (Exception exc) { t.Rollback(); lblMessage.Text = "Error occurred: " + exc.Message; } } }
}</source>
Use transaction to group operations (VB.net)
<source lang="csharp">
<%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script runat="server">
"declare connection dim Conn as new OleDbConnection( _ "PROVIDER=Microsoft.Jet.OLEDB.4.0;" _ & "DATA SOURCE=" _ & Server.MapPath("EmployeeDatabase.mdb;")) sub Page_Load(Sender as Object, e as EventArgs) dim objTrans as OleDbTransaction dim objCmd as OleDbCommand = new OleDbCommand _ ("DELETE from employee where UserID = 32", Conn) Conn.Open() objTrans = Conn.BeginTransaction() objCmd.Transaction = objTrans try objCmd.rumandText = "INSERT INTO employee " & _ "(ID, FirstName, LastName) VALUES " & _ "(109, "J", "S")" objCmd.ExecuteNonQuery() objCmd.rumandText = "INSERT INTO employee " & _ "(ID, FirstName, LastName) VALUES " & _ "(119, "J", "S")" objCmd.ExecuteNonQuery() objTrans.rumit() Label1.Text = "Both operations performed successfully" catch ex as OleDbException objTrans.RollBack() Label1.Text = ex.Message & "" Label1.Text = "Both operations failed" finally objCmd.Connection.Close() end try end sub
</script> <html><body>
<form runat="server"> <asp:Label id="Label1" runat="server" maintainstate=false />
</form>
</body></html></source>