希望我对ASP.NET事务一点经验能给大家带来帮助,导致WebDeployment出错的原因也许还有很多,不过在你遇到错误时,可以先检查一下你程序中的字符串,暂时把他们置为””,试试看。没准就是他引起的问题啊。
創建一個ADO.NET事務是很簡單的,僅僅是標準代碼的一個小的擴展。ASP.NET事务只要你知道如何使用ADO.NET來訪問數據庫,那就差不多知道了。區別僅僅是你需要把代碼放到一個事務上下文中。
還是原來的ADO.NET類庫引用,在實現事務的類裏面引入System.Data和System.Data.SqlClient類庫,為了執行一個事 務,你需要創建一個SqlTransation對象,可以調用你的SqlConnection對象BeginTransation()方法來創建它,一旦 你把SqlTransation對象存為本地變數,ASP.NET事务你就可以把它賦給你的SqlCommand對象的事務屬性,或者把它作為構
造器的一個參數來創建 SqlCommand。在執行SqlCommand動作之前,你必須調用BeginTransaction()方法,ASP.NET事务然後賦給SqlCommand事務屬 性。一單事務開始了,你就可以執行任何次數的SqlCommand動作,只要它是屬於同一個事務和連接。最後你可以調用SqlTransation的Commit()方法來提交事務。#t#
ADO.NET事務實際上是把事務上下文傳遞到數據庫層,如果事務中發生一個錯誤,ASP.NET事务庫會自動回滾。在你的錯誤處理代碼中,每次調用Rollback ()方法之前檢查事務對像是否存在是一種良好的習慣。這樣的一個例子是當一個死鎖發生的同時,數據庫正在執行自動回滾。優勢:
◆ 簡單性
◆ 和數據庫事務差不多的快
◆ 事務可以跨越多個數據庫訪問
◆ 獨立於數據庫,不同數據庫的專有代碼被隱藏了
限制:
事務執行在數據庫ASP.NET事务上,所以你需要在事務過程中手動的維護一個連接
例子:
- public int purchaseitem(int customerId, int itemId, int itemQty)
- {
- SqlConnection con = null;
- SqlTransaction tx = null;
- int orderId = 0;
- try
- {
- con = new SqlConnection("Data Source=localhost; user
- Id=sa;password=;Initial Catalog=trans_db;");
- con.Open();
- tx = con.BeginTransaction(IsolationLevel.Serializable);
- String updatesqltext = "UPDATE inventory SET qtyinstockqtyinstock
- = qtyinstock - " + itemQty.ToString()
- + " WHERE inventory.productid = " + itemId.ToString();
- SqlCommand cmd = new SqlCommand(updatesqltext, con, tx);
- cmd.ExecuteNonQuery();
- // String is 2 SQL statements: the first is the insert,
- the second selects the identity column
- String insertsqltext = "INSERT INTO orders VALUES
- (" + customerId.ToString() + "," + itemId.ToString()
- + "," + itemQty.ToString() + " , getdate() ); SELECT @@IDENTITY";
- cmd.CommandText = insertsqltext;
- // Retrieve the order id from the identity column
- orderId = Convert.ToInt32(cmd.ExecuteScalar());
- cmd.Dispose();
- tx.Commit();
- }
ASP.NET事务可以說是在.Net平臺上事務實現方式中最簡單的一種,你僅僅需要加一行代碼。在ASPX的頁面聲明中加一個額外的屬性,即是事務屬 性,它可以有 如下的值:Disabled (缺省), NotSupported, Supported, Required 和 RequiresNew,這些設置和COM+以及企業級服務中的設置一樣,ASP.NET事务典型地如果你想在頁面上下文中運行事務,那麼要設置為Required。如果頁 面中包含有用戶控件,那麼這些控件也會包含到事務中,事務會存在於頁面的每個地方。