【发布时间】:2012-02-29 08:33:51
【问题描述】:
我已经在 c# 中实现了SqlTransaction 来开始、提交和回滚事务。一切正常,但是在访问那些在事务期间连接的表时我遇到了一些问题。
在事务期间我无法读取表(那些正在事务中的表)。在搜索这个时,我发现它是由于排他锁而发生的。反过来,对该数据的任何后续选择都必须等待排他锁被释放。然后,我检查了SqlTransaction 提供的所有隔离级别,但都没有奏效。
因此,我需要在事务期间释放排他锁,以便其他用户可以访问该表并读取数据。
有什么方法可以做到这一点吗?
提前致谢。
这是我的交易 C# 代码
try
{
SqlTransaction transaction = null;
using (SqlConnection connection=new SqlConnection(Connection.ConnectionString))
{
connection.Open();
transaction=connection.BeginTransaction(IsolationLevel.Snapshot,"FaresheetTransaction");
//Here all transaction occurs
if (transaction.Connection != null)
{
transaction.Commit();
transaction.Dispose();
}
}
}
catch (Exception ex)
{
if (transaction.Connection != null)
transaction.Rollback();
transaction.Dispose();
} `
此代码工作正常,但问题是当我在事务期间访问表的数据(在事务期间访问的那些)时。应用程序的其他部分正在访问这些表。因此,当我尝试从表中读取数据时,它会引发异常。
【问题讨论】:
-
你在这里的意图是什么?更新时不取锁?还是让其他读者忽略锁? (这是有充分理由的)
-
我不想为其他用户锁定事务处理表......事务可以持续很长时间,因为在事务处理时,成千上万的数据插入到表中,所以它可能需要很长时间......所以,在交易期间,我希望其他用户可以访问该表并可以读取数据......
标签: c# sql sql-server-2005 transactions sqlconnection