ASP .Net 2.0交易處理

來源:互聯網
上載者:User
系統比較複雜,更新多個表,所以需要使用交易處理
https://www.microsoft.com/china/msdn/library/webservices/asp.net/dnbdabdasamppet4.mspx?mfr=true

http://editblog.csdn.net/msdncolumn/archive/2005/02/25/1658.aspx

http://blog.joycode.com/kaneboy/archive/2005/02/15/44356.aspx 介紹最清楚System.Transactions

http://idior.cnblogs.com/archive/2005/08/15/214300.html 介紹最深入System.Transactions
Transaction Team Wiki
Florin Lazar's Blog
Jim Johnson's Blog
Angle Saenz-Badillos' Blog 

http://www.15seconds.com/issue/040914.htm

public void TransactionTest()
        {
            string connectionString = "";
            IDbConnection connection = new SqlConnection(connectionString);
            connection.Open();
            IDbCommand command = new SqlCommand();
            command.Connection = connection;
            IDbTransaction transaction;
            transaction = connection.BeginTransaction(); //Enlisting database
            command.Transaction = transaction;
            try
            {
                /**//* Interact with database here, then commit the transaction
                */
                transaction.Commit();
            }
            catch
            {
                transaction.Rollback(); //Abort transaction
            }
            finally
            {
                connection.Close();
            }
        }

什麼是 System.Transactions

System.Transactions 是 .NET 2.0 架構中新增的事務控制項命名空間。它是一種處理分散式交易的新方式,沒有 COM+ 註冊和 COM+ 目錄的開銷。請注意,Microsoft 分散式交易協調器用於初始化事務。

運行情況

同步定單處理中的 Order.Insert() 方法使用 System.Transactions 插入一個定單並更新庫存。通過添加對 System.Transaction 命名空間的引用,並將定單插入方法和庫存減少方法封裝在 TransactionScope 內,我們實現了 Order.Insert() 方法,如代碼清單 1 所示。

清單 1. 運行中的 System.Transactions

using System;using System.Transactions;using PetShop.IBLLStrategy;namespace PetShop.BLL {/// <summary>/// This is a synchronous implementation of IOrderStrategy/// By implementing IOrderStrategy interface, the developer can/// add a new order insert strategy without re-compiling the whole/// BLL./// </summary>public class OrderSynchronous : IOrderStrategy {.../// <summary>/// Inserts the order and updates the inventory stock within/// a transaction./// </summary>/// <param name="order">All information about the order</param>public void Insert(PetShop.Model.OrderInfo order) {using (TransactionScope ts = newTransactionScope(TransactionScopeOption.Required)) {dal.Insert(order);// Update the inventory to reflect the current inventory// after the order submission.Inventory inventory = new Inventory();inventory.TakeStock(order.LineItems);// Calling Complete commits the transaction.// Excluding this call by the end of TransactionScope's// scope will rollback the transaction.ts.Complete();}}}}
 
 
<%@Page Language="VB" Debug="True"%>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.OleDb" %>
<html>
<body>
<h2>Original DataSet that was read in from the database:</h2>
<asp:datagrid id="ShowMembersOriginal" runat="server"/>
<h2>DataSet after changes:</h2>
<asp:datagrid id="ShowMembersWorking" runat="server"/>
</body>
</html>
<script language="vb" runat="server">
Sub Page_Load()
 Dim strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\edward\Association.mdb"
 Dim strSelect = "SELECT * FROM Members"
 Dim objDataSet As New DataSet()
 Dim objConnect As New OleDbConnection(strConnect)
 Dim objDataAdapter As New OleDbDataAdapter(strSelect, objConnect)
 
 objDataAdapter.Fill(objDataSet, "TheMembers") 
 objDataSet.AcceptChanges()
 Dim objTable As DataTable = objDataSet.Tables("TheMembers")
 
 ShowMembersOriginal.DataSource = objTable.DefaultView
 ShowMembersOriginal.DataBind()
 objTable.Rows(0).Delete()
 objTable.Rows(1)("LastName") = "-NewLastName-"
 objTable.Rows(2).Delete()
 objTable.Rows(3).Delete()
 objTable.Rows(4)("Contributions") = "9999"
 objTable.Rows.RemoveAt(5)
 objTable.Rows(5)("FirstName") = "-NewFirstName-"
 Dim objValsArray(2) As Object
 objValsArray(0) = 0
 objValsArray(1) = "NewOneFirstName"
 objValsArray(2) = "NewOneLastName"
 objTable.Rows.Add(objValsArray)
 Dim objTransaction As OleDbTransaction
 Dim objCommandBuilder As New OleDbCommandBuilder(objDataAdapter)
 objDataAdapter.DeleteCommand = objCommandBuilder.GetDeleteCommand()
 objDataAdapter.InsertCommand = objCommandBuilder.GetInsertCommand()
 objDataAdapter.UpdateCommand = objCommandBuilder.GetUpdateCommand()
 objConnect.Open()
 objTransaction = objConnect.BeginTransaction()
 objDataAdapter.DeleteCommand.Transaction = objTransaction
 objDataAdapter.InsertCommand.Transaction = objTransaction
 objDataAdapter.UpdateCommand.Transaction = objTransaction
 objDataAdapter.Update(objDataSet, "TheMembers")
 
 ShowMembersWorking.DataSource = objTable.DefaultView
 ShowMembersWorking.DataBind()
 
 'objTransaction.Commit()
 objTransaction.RollBack()
 
End Sub
</script>
 
 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.