我有这段代码,在两个单独的线程中并行运行。它可以正常工作几次,但在某个随机点它会抛出 InvalidOperationException:
事务要么与当前连接无关,要么已完成。
在异常点,我正在使用 Visual Studio 查看事务并验证其连接设置是否正常。还有 command.Transaction._internalTransaction。_transactionState 设置为 Active 并且 IsZombied 属性设置为 false。
这是一个测试应用程序,我正在使用 Thread.Sleep 创建更长的事务并导致重叠。
为什么会抛出异常,我该怎么办?
IDbCommand command = new SqlCommand("Select * From INFO");
IDbConnection connection = new SqlConnection(connectionString);
command.Connection = connection;
IDbTransaction transaction = null;
try
{
connection.Open();
transaction = connection.BeginTransaction();
command.Transaction = transaction;
command.ExecuteNonQuery(); // Sometimes throws exception
Thread.Sleep(forawhile); // For overlapping transactions running in parallel
transaction.Commit();
}
catch (ApplicationException exception)
{
if (transaction != null)
{
transaction.Rollback();
}
}
finally
{
connection.Close();
}