3
我想只爲一個特定的連接在sql中創建一個事務。它應該爲所有連接鎖定該表,但允許其他連接讀取該表,即使事務已從另一個連接開始。我應該使用什麼隔離級別。如何在sql中爲特定連接創建事務?
Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);
我想只爲一個特定的連接在sql中創建一個事務。它應該爲所有連接鎖定該表,但允許其他連接讀取該表,即使事務已從另一個連接開始。我應該使用什麼隔離級別。如何在sql中爲特定連接創建事務?
Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);
對於選擇查詢您可以使用使用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();
}
}
謝謝您的回答,我如何能實現它在C#代碼? – Shell 2014-09-02 10:36:44
我在那裏添加了一些代碼。另外,在你正在執行的SQL中,你可以使用WITH(NOLOCK)提示 - 和IsolationLevel.ReadUncommitted – Donal 2014-09-02 10:57:01
一樣。感謝這個例子,讓我試試這個。 – Shell 2014-09-02 10:59:18