繁体   English   中英

C#我应该将Sql / OleDb transaction.Commit()放在for循环之外吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM