IsolationLevel问题。即使设置为ReadUncommited也无法访问表

时间:2011-03-22 13:23:58

标签: c# sql-server sql-server-2008

我对这段代码有些问题。当我运行它时,我希望它不会锁定事务使用的表。为实现此目标,我将隔离级别设置为ReadUncommited。

问题是它仍然锁定表,它的作用就像isolationLevel是Serializable一样。我正在使用SQL Server 2008

以下是代码:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
{
   while (true)
   {
      using (SqlConnection connection = new SqlConnection(ConnectionString))
      {
         connection.Open();

         Console.WriteLine(Transaction.Current.IsolationLevel);

         SqlUtils.ExecuteNonQuery(connection, "INSERT INTO test4 (test) VALUES ('ASDASDASD')");
      }
      Thread.Sleep(1000);
   }

   scope.Complete();
}

2 个答案:

答案 0 :(得分:5)

事务隔离级别Read Uncommitted仅适用于读取数据(如名称所示)。它将读取尚未提交的数据。

当你INSERT或UPDATE数据时,我无法阻止SQL Server对表进行锁定。

答案 1 :(得分:2)

ReadUncommitted,顾名思义,影响读者 - 即读取操作应采用读锁和键范围锁;他们应该尊重现有的锁等吗?

想知道 IsolationLevel.Chaos是否会提供任何内容,但请不要使用它。请。

如果您的竞争对手需要查看未提交的数据,请更改 阅读器 的隔离级别。此外,不用说,但不推荐长期运行的交易(特别是DTC / LTM交易)。