我有两个场景都运行相同的代码,一个运行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();
答案 0 :(得分:2)
正如所讨论的,首先,如果你不需要两个连接,你可以只使用一个连接,所以一切都在同一个交易中运行。
如果您需要与运行类似查询的其他进程或线程并行运行这组SQL,您可能需要重新查看语句的隔离和锁定。
您可能正在运行第一个事务作为Serializable隔离并对其进行更新。考虑使用ReadCommited(或Snapshot ReadCommited)。但这取决于你的实际工作。
从SSMS,尝试先运行
SET TRANSACTION ISOLATION LEVEL READUNCOMMITTED
这应该避免由第一个事务创建的锁,但这只是为了让你可以看到它发生的原因,使用那个隔离级别不是一个好主意!