如何为两个表使用事务?

时间:2013-10-23 12:10:11

标签: c#

如何为两个表使用事务?

例如,我有两个表(main和detail),当我在主表中插入一个记录时,可以用for循环详细插入一些记录(MORE THAN ONE RECORD)。我需要按时控制两个表。

2 个答案:

答案 0 :(得分: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();
}

Commit()上,将写入所有数据。在Rollback()上,不会写入任何单个数据行。因此,如果在写入子数据时发生了某些事情,您可以回滚整个事务,而不是main也不会写入detail表数据。

答案 1 :(得分:0)

您可以使用

var transaction = sqlConnection.BeginTransaction(); 

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

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