C# SQL连接赢了';事务处理期间无法运行

C# SQL连接赢了';事务处理期间无法运行,c#,sql,.net,transactions,sqlconnection,C#,Sql,.net,Transactions,Sqlconnection,我有两个场景都运行相同的代码,其中一个运行100%的时间,而另一个同样经常失败 当事务正在进行时,我有两个sql连接在本地指向同一个sql server。当我尝试对第二个连接运行查询时,它超时。在调试过程中,我甚至可以进入SSMS并尝试运行一个查询,而它也将被放置在那里。它在另一个场景中工作这一事实很奇怪,但最终我试图弄清楚为什么在运行另一个sqlconnection时sql会被锁定 有没有人知道是什么原因导致了这种情况,或者我可以使用什么调试工具?我对使用transactionScope不感兴

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

当事务正在进行时,我有两个sql连接在本地指向同一个sql server。当我尝试对第二个连接运行查询时,它超时。在调试过程中,我甚至可以进入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();

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

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

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

从SSMS中,首先尝试运行

SET TRANSACTION ISOLATION LEVEL READUNCOMMITTED

这应该可以避免fist事务创建的锁,但这只是为了让您了解为什么会发生这种情况,使用这种隔离级别不是一个好主意

这允许我在SSMS中运行查询。我不熟悉这个,所以让我做一些研究,我会让你知道它是否解决了我的问题。谢谢你提供的信息!更改隔离级别的最简单方法是创建事务作用域,但不确定为什么要避免它。看起来我仍然可以设置基本SqlTransaction的隔离级别。我之所以避开作用域,是因为我没有运行它所需要的Sql服务(我现在不知道该名称)。我为事务设置了隔离级别,确认在故障点它仍然正确设置了属性,并且它仍然锁定。它仍然锁定在SSMS中,但在SSMS中显式设置它将允许我从那里进行查询。编辑:顺便说一下,我将隔离级别设置为ReadUncommitted。当然,它只包含1个事务,但包含2个sql连接。事务附加到sqlconnection1,后者执行读/写操作。中途,我初始化了sqlconnection2,它一起从不同的数据库读取数据。您能将连接附加到与sqlConnection1相同的事务吗?如果您使用事务作用域,这应该相当容易,但是如果您的sql提供程序不允许这样做..不,很遗憾,我无法将事务与多个连接相关联。我知道scope做到了这一点,这就是为什么我在意识到它需要该服务之前尝试使用它。如果这是一个个人项目,我会这么做,但现在我需要这项服务是不可行的。那么为什么要使用两个连接呢?仅仅是因为我可能正在查询另一个数据库。在这种情况下,结果是一样的。也许这就是需要发生的事情。我可以检查它是否相同并使用相同的连接。我将查看它们在不同的数据库上时是否存在问题。如果它们是不同的数据库,则不应该有任何锁定。您需要担心是否可能有不同的进程/线程使用该代码查询同一数据库,即使您只使用一个连接。