【发布时间】:2015-03-06 16:28:12
【问题描述】:
我有 2 个场景都运行相同的代码,其中一个 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();
【问题讨论】:
-
能否将连接附加到与 sqlConnection1 相同的事务?如果您使用事务范围,那应该相当容易,但如果您的 sql 提供程序不允许这样做..
-
不,很遗憾,我无法将事务与多个连接相关联。我知道范围是这样做的,这就是为什么我在意识到它需要该服务之前尝试使用它的原因。如果这是一个个人项目,我会这样做,但我现在要求这项服务是不可行的。
-
那么为什么要使用两个连接呢?
-
仅仅是因为我可能正在查询不同的数据库。在这种情况下,它最终是相同的。也许这就是需要发生的事情。我可以检查它是否相同并使用相同的连接。当它们在不同的数据库上时,我会看看是否存在问题。
-
如果它们是不同的数据库,则不应有任何锁定。您需要担心是否可能有不同的进程/线程使用该代码查询同一个数据库,即使您只使用一个连接。
标签: c# sql .net transactions sqlconnection