[英]Does Transaction.Commit() closes the underlying connection as well. C#
[英]C# Should I place the Sql/OleDb transaction.Commit() outside of a for loop?
我有以下基本的oledb循环:
using (OleDbConnection conn = new OleDbConnection(Con))
{
using (OleDbCommand cmd = new OleDbCommand())
{
for loop
{
cmd.Connection = conn;
conn.Open();
transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.CommandText = "row by row insert"
cmd.Some parameters, then ExecuteNonQuery
transaction.Commit();
}
}
}
但是,我不确定命令执行后是否应该将Commit
放入循环中。 说完之后我应该放置它吗? 大纲using
将是一个try catch
包含在回滚catch
。 因此,我猜测如果我希望能够回滚所有更改,我是否希望循环完全运行,然后提交?
我还刚刚学习了TransactionScope
,它在使用中概述了SQL上下文,因此我想知道它也如何应用于它。
当BeginTransaction()
调用位于循环内时,不能将Commit()
调用移到循环外。 要么两者都将留在循环中,要么都将留在循环之外。
因此,您的问题应该是:“我应该在循环的每个迭代中执行一个事务,还是应该启动一个事务,执行循环,然后提交该事务?”
好吧,每次迭代执行一次事务的唯一原因是非常不可能的情况,即使所有失败插入都失败,您也希望所有未失败插入都被提交。 (在这种情况下,您还需要执行一些异常处理。)
如果您没有这样的要求,并且不介意数量级的性能改进,那么最好启动一个事务,进行循环,然后关闭事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.