SQL 交易期间无法连接 运行

SQL Connection Won't Run During Transaction

我有两种情况 运行 使用相同的代码,一种情况 100% 有效,而另一种情况同样经常失败。

我有 2 个 sql 连接在本地指向同一个 sql 服务器,同时交易正在进行。当我尝试 运行 针对第二个连接的查询时,它超时。在调试时,我什至可以进入 SSMS 并尝试 运行 查询,它也将就在那里。它在另一种情况下起作用的事实很奇怪,但最终我想弄清楚为什么 sql 在我 运行 连接另一个 sql 连接时被锁定。

有没有人知道是什么原因导致这个问题或我可以使用任何调试工具?我对使用 transactionScope 不感兴趣。

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

这是问题发生的时间。在这一点上,我们有 sqlconnection1 附加了一个事务和 运行ning:

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

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


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

如前所述,第一件事是,如果您不需要两个连接,您可以只使用一个连接,这样所有 运行 都在同一个事务中。

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

您可能 运行将第一个事务设置为可序列化隔离并对其进行更新。考虑使用 ReadCommited(或快照 ReadCommited)。但这取决于你的实际工作。

从 SSMS,首先尝试 运行ning

SET TRANSACTION ISOLATION LEVEL READUNCOMMITTED

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