【发布时间】:2011-01-19 14:17:04
【问题描述】:
出于集成测试的目的,我们正在保存数据并从 SQL 中读取数据。为避免测试数据库中出现“垃圾”,它在事务中运行并回滚。
在运行此事务时,它会抛出“TransactionScope error”异常:
using (var transaction = new TransactionScope())
{
// saving (submitchanges)
// reading (linq2sql select to get saved data) // 'Transaction has aborted' was thrown
// rollback
}
使用显式连接/事务处理时效果很好 - 但代码很丑。
我能做什么?
环境:.NET 3.5/C#、MSSQL2k8
详细异常:
System.Transactions.TransactionAbortedException :事务已中止。 ----> System.Transactions.TransactionPromotionException :尝试提升事务时失败。 ----> System.Data.SqlClient.SqlException : 已经有一个打开的 DataReader 与此命令关联,必须先关闭。*
【问题讨论】:
-
正如您在详细信息中看到的那样,问题在于在该连接中打开了多个数据读取器。你可以在 using 中使用 try-catch 捕获异常吗?你真的在 using 子句中执行 transaction.rollback 吗?
-
你在哪里看到
TransactionScope?因为示例中没有... -
您是否在事务中打开了多个数据库连接?它将需要 MSDTC。
-
@Mrnka:是的,据我所知,MSDTC 已启用。
标签: c# .net sql linq transactionscope