如何对两个表使用事务?
例如,我们有两张表(主表和明细表),当我在主表中插入一条记录时,可能会使用 for 循环(多条记录)插入一些详细记录。我需要按时控制两张交易表。
在连接上使用事务:
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()
,不会写入单个数据行。因此,如果在写入子数据时发生了一些事情,您可以回滚整个事务并且也不向main
表detail
数据写入。
您可以使用
var transaction = sqlConnection.BeginTransaction();
方法,用于启动事务,然后执行查询以插入所需的表,然后调用transaction.Commit();
,如果出现异常,调用transaction.RollBack();
考虑到 sqlConnection 是您的数据库连接变量