SQL连接在事务期间不会运行

时间:2015-03-06 16:28:13

标签: c# sql .net transactions sqlconnection

我有两个场景都运行相同的代码,一个运行100%的时间而另一个运行失败。

我有2个sql连接指向同一个sql服务器在事务进行时。当我尝试针对第二个连接运行查询时,它会超时。在调试时,我甚至可以进入SSMS并尝试运行查询,它也会坐在那里。它在其他场景中工作的事实很奇怪,但最终我试图找出为什么在我运行其他sqlconnection时锁定了sql。

有没有人对我可以使用的这个或任何调试工具有什么想法?我对使用transactionScope不感兴趣。

如果我事先关闭了第一个连接,第二个连接的查询就会正常运行。

以下是问题发生的时间。此时我们的sqlconnection1已附加并运行了一个事务:

                    SqlConnection connection = new SqlConnection(ConnectionString);
                    connection.Open();

                    SqlCommand command = new SqlCommand("", connection);


                    command.CommandText = "a read command"
                    int  count = command.ExecuteScalar();

1 个答案:

答案 0 :(得分:2)

正如所讨论的,首先,如果你不需要两个连接,你可以只使用一个连接,所以一切都在同一个交易中运行。

如果您需要与运行类似查询的其他进程或线程并行运行这组SQL,您可能需要重新查看语句的隔离和锁定。

您可能正在运行第一个事务作为Serializable隔离并对其进行更新。考虑使用ReadCommited(或Snapshot ReadCommited)。但这取决于你的实际工作。

从SSMS,尝试先运行

SET TRANSACTION ISOLATION LEVEL READUNCOMMITTED

这应该避免由第一个事务创建的锁,但这只是为了让你可以看到它发生的原因,使用那个隔离级别不是一个好主意!