循环提交数据

时间:2018-07-23 23:35:09

标签: c# sql-server

我正在像这样的伪代码循环处理文件:

foreach (filename in files) {
    database("insert into file_processed(filename) values (@filename)")
    database("delete from file_staging")
    foreach (line in filename) {
        database("insert into filestaging(column, list) values (@line.split()")
    }
    database("merge filestaging into filepermanent")
    database("commit");
}

问题是:一旦我执行commit(),循环的顶部插入就会失败,因为提交终止了事务。

是否可以在不终止事务的情况下进行commit()?

注意:我很确定答案是否定的,但我很高兴感到惊讶。

是否可以将新事务与现有SqlCommand相关联?

该问题的上下文是,目前我仅看到一种关联New SqlCommand(...)上交易的方法。在设置参数的所有其他开销中,让它一直循环运行似乎是一种浪费。

    public void InsertRunHistory(string datasource, DateTime rundate)
    {
        SqlCommand command = InsertIVS_RUNHISTORY;

        command.SetTransaction(transaction);  // Does this exist?
        command.Parameters[0].Value = datasource;
        command.Parameters[1].Value = rundate;
        command.Parameters[2].Value = r_activity_id;

        ivs_runhistory_id = (int)command.ExecuteScalar();
    }

1 个答案:

答案 0 :(得分:0)

我找到了魔术命令。 这行代码来自我的示例:

command.SetTransaction(transaction);

已替换为:

command.Transaction = transaction;

也就是说,它是由SqlCommand对象上的属性设置的。

在我的实际代码中,我没有在与Execute相同的方法中进行设置,而是在循环的顶部进行了操作。

无需创建新的SqlCommand,因为可以为现有的SqlCommand分配新的SqlTransaction。