【发布时间】:2014-09-02 22:40:07
【问题描述】:
我只想在 sql 中为特定连接创建事务。它应该为所有连接锁定该表,但允许其他连接读取该表,即使事务已从另一个连接开始。我应该使用什么隔离级别。
Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);
【问题讨论】:
标签: c# sql-server tsql
我只想在 sql 中为特定连接创建事务。它应该为所有连接锁定该表,但允许其他连接读取该表,即使事务已从另一个连接开始。我应该使用什么隔离级别。
Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);
【问题讨论】:
标签: c# sql-server tsql
对于选择查询,您可以使用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();
}
}
【讨论】: