【发布时间】:2012-10-05 08:17:37
【问题描述】:
我必须在我的数据库中添加很多信息。添加此信息大约需要 5-7 分钟。我需要添加交易。
我试过了:
try {
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
UpdateTable1();
UpdateBigTable2();
...
db.Transaction.Commit();
} catch {
db.Transaction.Rollback();
}
但是当我的数据库更新时,我无法读取数据库或对数据库执行任何操作。
我尝试设置IsolationLevel,但没有任何帮助。
我试过了:
using (var ts = new TransactionScope()) {
UpdateTable1();
ts.Complete();
}
但程序在 2-3 分钟后崩溃。
这个解决方案也没有帮助:
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
transactionOptions.Timeout = TimeSpan.MaxValue;
using (var ts = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
...
}
如果我设置TransactionScopeOption.Suppress,我可以在更新时访问我的数据库
但在这种情况下,Transaction 不起作用。
【问题讨论】:
-
当您更新时不仅是更新命令,而且是从外部源插入的东西,我建议您尝试将 SQLBulkCopy 放入暂存数据库,然后从那里复制到您的实际数据库。这应该快得多。 (我曾经通过这种方法完成了 3000-6000 倍)。
-
@TGlatzer 在 transactionscope 中使用 SQLBulkCopy 的完整真实世界代码示例? 隔离级别 ?
标签: c# linq transactions sql-server-ce