0

如何对两个表使用事务?

例如,我们有两张表(主表和明细表),当我在主表中插入一条记录时,可能会使用 for 循环(多条记录)插入一些详细记录。我需要按时控制两张交易表。

4

2 回答 2

1

在连接上使用事务:

IDbConnection someConnection = new ....
var transaction = someConnection.BeginTransaction(TransactionScope.Serializable);

try
{
    IDbCommand cmd = someConnection.GetCommand();
    cmd.Transaction = transaction;
    ...
    cmd.ExecuteNonQuery();

    foreach(var data in subdata)
    {
        IDbCommand subcmd = someConnection.GetCommand();
        subcmd.Transaction = transaction;
        ...
        subcmd.ExecuteNonQuery();
    }

    ...
    transaction.Commit();
}
catch(Exception e)
{
    transaction.Rollback();
}

On Commit(),将写入所有数据。On Rollback(),不会写入单个数据行。因此,如果在写入子数据时发生了一些事情,您可以回滚整个事务并且也不向maindetail数据写入。

于 2013-10-23T12:15:42.837 回答
0

您可以使用

var transaction = sqlConnection.BeginTransaction(); 

方法,用于启动事务,然后执行查询以插入所需的表,然后调用transaction.Commit();,如果出现异常,调用transaction.RollBack();

考虑到 sqlConnection 是您的数据库连接变量

于 2013-10-23T12:16:45.083 回答