如何为两个表使用事务?
例如,我有两个表(main和detail),当我在主表中插入一个记录时,可以用for循环详细插入一些记录(MORE THAN ONE RECORD)。我需要按时控制两个表。
答案 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是您的数据库连接变量