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

问题在于它仍然锁定该表,其行为就像IsolationLevel是可序列化的。我正在使用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();
}

最佳答案

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

当您插入或更新数据时,我无法阻止SQL Server对表进行锁定。

关于c# - IsolationLevel问题。即使设置为ReadUncommited也无法访问表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5391972/

10-09 08:35