ASP.NET事務(wù)相關(guān)技巧介紹說明
希望我對ASP.NET事務(wù)一點經(jīng)驗?zāi)芙o大家?guī)韼椭瑢?dǎo)致WebDeployment出錯的原因也許還有很多,不過在你遇到錯誤時,可以先檢查一下你程序中的字符串,暫時把他們置為””,試試看。沒準(zhǔn)就是他引起的問題啊。
創(chuàng)建一個ADO.NET事務(wù)是很簡單的,僅僅是標(biāo)準(zhǔn)代碼的一個小的擴(kuò)展。ASP.NET事務(wù)只要你知道如何使用ADO.NET來訪問數(shù)據(jù)庫,那就差不多知道了。區(qū)別僅僅是你需要把代碼放到一個事務(wù)上下文中。
還是原來的ADO.NET類庫引用,在實現(xiàn)事務(wù)的類裏面引入System.Data和System.Data.SqlClient類庫,為了執(zhí)行一個事 務(wù),你需要創(chuàng)建一個SqlTransation對象,可以調(diào)用你的SqlConnection對象BeginTransation()方法來創(chuàng)建它,一旦 你把SqlTransation對象存為本地變數(shù),ASP.NET事務(wù)你就可以把它賦給你的SqlCommand對象的事務(wù)屬性,或者把它作為構(gòu)
造器的一個參數(shù)來創(chuàng)建 SqlCommand。在執(zhí)行SqlCommand動作之前,你必須調(diào)用BeginTransaction()方法,ASP.NET事務(wù)然後賦給SqlCommand事務(wù)屬 性。一單事務(wù)開始了,你就可以執(zhí)行任何次數(shù)的SqlCommand動作,只要它是屬於同一個事務(wù)和連接。最後你可以調(diào)用SqlTransation的Commit()方法來提交事務(wù)。#t#
ADO.NET事務(wù)實際上是把事務(wù)上下文傳遞到數(shù)據(jù)庫層,如果事務(wù)中發(fā)生一個錯誤,ASP.NET事務(wù)庫會自動回滾。在你的錯誤處理代碼中,每次調(diào)用Rollback ()方法之前檢查事務(wù)對像是否存在是一種良好的習(xí)慣。這樣的一個例子是當(dāng)一個死鎖發(fā)生的同時,數(shù)據(jù)庫正在執(zhí)行自動回滾。優(yōu)勢:
◆ 簡單性
◆ 和數(shù)據(jù)庫事務(wù)差不多的快
◆ 事務(wù)可以跨越多個數(shù)據(jù)庫訪問
◆ 獨立於數(shù)據(jù)庫,不同數(shù)據(jù)庫的專有代碼被隱藏了
限制:
事務(wù)執(zhí)行在數(shù)據(jù)庫ASP.NET事務(wù)上,所以你需要在事務(wù)過程中手動的維護(hù)一個連接
例子:
- 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事務(wù)可以說是在.Net平臺上事務(wù)實現(xiàn)方式中最簡單的一種,你僅僅需要加一行代碼。在ASPX的頁面聲明中加一個額外的屬性,即是事務(wù)屬 性,它可以有 如下的值:Disabled (缺省), NotSupported, Supported, Required 和 RequiresNew,這些設(shè)置和COM+以及企業(yè)級服務(wù)中的設(shè)置一樣,ASP.NET事務(wù)典型地如果你想在頁面上下文中運行事務(wù),那麼要設(shè)置為Required。如果頁 面中包含有用戶控件,那麼這些控件也會包含到事務(wù)中,事務(wù)會存在於頁面的每個地方。