2 つのテーブルの問い合わせと詳細があります。保存ボタンをクリックすると、私は書いた
fbsave();
fbsavedetails();
fbsave()
照会テーブルにデータをfbsavedetails()
保存し、詳細テーブルにデータを保存します。
fbsavedetails() でエラーが発生した場合は、両方の手順をロールバックする必要があります。
出来ますか?
トランザクションを明示的に作成し、それを渡すことができます。
using(var connection = ...)
{
connection.Open();
using (var tran = connection.BeginTransaction())
{
try
{
FBSave(connection, tran);
FBSaveDetails(connection, tran);
tran.Commit();
}
catch
{
tran.Rollback();
throw;
}
}
}
ここでは、各コマンドでも設定する必要Transaction
があることに注意してください。したがって、それを渡す必要がある理由と、すべてのコマンドが同じ接続オブジェクト上にある必要があります。
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
アプローチでは、特別なものを設定する必要はありません。そのほとんどは自動的に設定されます。もちろん、必要に応じて接続をメソッドに渡すこともできますが、独自の接続を取得することもでき、ほとんどの場合は問題なく動作します。
トランザクションスコープを使用できます。
using(var scope = new TransactionScope())
{
//Complete the transaction only when both inserts succeed.
scope.Complete();
}
transactionscope を完了しないと、ロールバックされます。
この問題を解決するには2つの方法があります