我有2个表查询和细节.
在保存按钮上单击我已经写
在保存按钮上单击我已经写
- fbsave();
- fbsavedetails();
fbsave()将数据保存在查询表中,fbsaveetails()将数据保存在详细信息表中.
现在如果在fbsavedetails()中发生错误,则两个步骤都应该回滚.
可能吗?
解决方法
您可以显式地创建一个交易并将其传递,即
- using(var connection = ...)
- {
- connection.Open();
- using (var tran = connection.BeginTransaction())
- {
- try
- {
- FBSave(connection,tran);
- FBSaveDetails(connection,tran);
- tran.Commit();
- }
- catch
- {
- tran.Rollback();
- throw;
- }
- }
- }
请注意,在这里,您还必须在每个命令上设置事务,因此为什么需要传递它,所有命令必须在同一个连接对象上.
或者:您可以使用TransactionScope;重要的是,Open()发生在TransactionScope内以获得自动登记:
- using(var tran = new TransactionScope())
- {
- FBSave();
- FBSaveDetails();
- tran.Complete();
- }
要么:
- using(var tran = new TransactionScope())
- using(var connection = ...)
- {
- connection.Open();
- FBSave(connection);
- FBSaveDetails(connection);
- tran.Complete();
- }
与TransactionScope方法,您不需要设置任何特殊的 – 大部分是自动的.您当然可以将连接传递到方法中,但也可以获取自己的连接,并且在大多数情况下它可以正常工作.