筆者對ADO.Net Sql進行使用說明
原來上網(wǎng)我下了很多ADO.Net Sql的Demo。而我用的是ADO.Net Sql,我在使用這些小樣時,基本上絕大部分基于ADO.Net Sql工程都因為少數(shù)文件無法轉(zhuǎn)換而無法加載工程,為此我也苦惱很久,后來終于讓我找到了解決辦法。
System.Data.SqlClient namespace包括了SqlTransaction類。此類包括了兩個屬性:
◆Connection:指示同事務(wù)處理相關(guān)聯(lián)的SqlConnection對象;
◆IsolationLevel:定義事務(wù)處理的ADO.Net Sql。
屬性IsolationLevel是包括如下成員的枚舉對象:
◆Chaos:從高度獨立的事務(wù)處理中出現(xiàn)的pending changes不能被覆蓋;
◆ReadCommitted:當數(shù)據(jù)需要被非惡意讀取時,采用共享鎖定(shared locks),但數(shù)據(jù)仍然可以在事務(wù)處理結(jié)束時被更新,這造成了非重復(fù)性的數(shù)據(jù)讀?。╪onrepeatable reads)或phantom data的產(chǎn)生;#t#
◆ReadUncommitted:惡意讀取數(shù)據(jù)是可能發(fā)生的,這表示沒有使用共享鎖定(shared locks),并且沒有實現(xiàn)獨占鎖定(exclusive locks);
◆ADO.Net Sql:鎖定查詢中所用到的所有數(shù)據(jù),由此避免其他用戶對數(shù)據(jù)進行更新。在phantom rows仍然可用的狀態(tài)下,這可以避免非重復(fù)性的數(shù)據(jù)讀?。╪onrepeatable reads);
◆Serialisable:在DataSet中進行范圍鎖定,由此防止其他用戶在事務(wù)處理結(jié)束之前更新數(shù)據(jù)或在數(shù)據(jù)庫中插入行;
◆IsolationLevel定義鎖定記錄的級別,但這一概念不在本文論述范圍之內(nèi)。對象SqlTransaction也提供了類似的方法。你可以使用以下方法來進行事務(wù)處理;
◆Commit:提交數(shù)據(jù)庫事務(wù)處理;
◆ADO.Net Sql:從未決狀態(tài)(pending state)反轉(zhuǎn)(roll back)事務(wù)處理。事務(wù)處理一旦被提交后即不能執(zhí)行此操作;
◆Save:在事務(wù)處理中創(chuàng)建savepoint可以對事務(wù)處理的一部分進行反轉(zhuǎn),并且指定savepoint名稱。
創(chuàng)建一個ADO.NET事務(wù)是很簡單的,僅僅是標準代碼的一個小的擴展。只要你知道如何使用ADO.NET來訪問數(shù)據(jù)庫,那就差不多知道了。區(qū)別僅僅是你需要把代碼放到一個事務(wù)上下文中。
還是原來的ADO.Net Sql類庫引用,在實現(xiàn)事務(wù)的類裏面引入System.Data和System.Data.SqlClient類庫,為了執(zhí)行一個事 務(wù),你需要創(chuàng)建一個SqlTransation對象,可以調(diào)用你的SqlConnection對象BeginTransation()方法來創(chuàng)建它,一旦 你把SqlTransation對象存為本地變數(shù),你就可以把它賦給你的SqlCommand對象的事務(wù)屬性,或者把它作為構(gòu)造器的一個參數(shù)來創(chuàng)建 SqlCommand。在執(zhí)行SqlCommand動作之前,你必須調(diào)用BeginTransaction()方法,然後賦給SqlCommand事務(wù)屬 性。