2014-09-02 24 views
3

我想只爲一個特定的連接在sql中創建一個事務。它應該爲所有連接鎖定該表,但允許其他連接讀取該表,即使事務已從另一個連接開始。我應該使用什麼隔離級別。如何在sql中爲特定連接創建事務?

Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);    

回答

3

對於選擇查詢您可以使用使用WITH (NOLOCK)SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

READ UNCOMMITTED:指定語句可以讀取已由其他事務修改但尚未提交的行。因此,select語句可以讀取其他未提交事務更新的行。因此,需要在要讀取該表的另一個連接上設置隔離級別。

如果你願意,你可以在連接設置此:

var myConnection = new SqlConnection(); 

// connection for reading uncommitted transactions 
myConnection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit(); 

或者,如果你願意,你可以只是做一個事務中:

using (var myConnection = new SqlConnection(connectionString)) { 
    myConnection.Open(); 
    using (var transaction = myConnection.BeginTransaction(IsolationLevel.ReadUncommitted)) { 
     // do stuff 
     transaction.Commit(); 
    } 
} 
+0

謝謝您的回答,我如何能實現它在C#代碼? – Shell 2014-09-02 10:36:44

+0

我在那裏添加了一些代碼。另外,在你正在執行的SQL中,你可以使用WITH(NOLOCK)提示 - 和IsolationLevel.ReadUncommitted – Donal 2014-09-02 10:57:01

+0

一樣。感謝這個例子,讓我試試這個。 – Shell 2014-09-02 10:59:18