複数のプロセスの後に Rollback() または commit() 関数を使用したい。
エラーはありませんが、DB を更新するために commit() しません。
ここに私のコード例があります、
public void startTransaction(){
using(Ads_A_Connection = new AdsConnection(Ads_A_connection_string))
using(Ads_B_Connection = new AdsConnection(Ads_B_connection_string))
{
Ads_A_Connection.Open();
Ads_B_Connection.Open();
AdsTransaction aTxn = Ads_A_Connection.BeginTransaction();
AdsTransaction bTxn = Ads_B_Connection.BeginTransaction();
try{
string aResult = this.process1(Ads_A_Connection);
this.process2(Ads_B_Connection, aResult);
this.process3(Ads_A_Connection. Ads_B_Connection);
aTxn.Commit();
bTxn.Commit();
// there is no error, but it couldn't commit.
}catch(Exception e){
aTxn.Rollback();
bTxn.Rollback();
}
}
}
public string process1(conn){
// Insert data
return result;
}
public void process2(conn. aResult){
// update
}
public void process3(aConn, bConn){
// delete
// update
}
スコープを使用していないためだと思います。すべてのコードを startTransaction() メソッドに入れようとしたため、機能します。でも見た目が汚すぎる。
複数の (METHOD) プロセスの後に rollback() または commit() を使用するにはどうすればよいですか?
どなたかご存知の方アドバイスお願いします。
ありがとう!
[編集]
接続前に TransactionScope を追加するだけで、
using (TransactionScope scope = new TransactionScope())
{
using(Ads_A_Connection = new AdsConnection(Ads_A_connection_string))
using(Ads_B_Connection = new AdsConnection(Ads_B_connection_string))
{
.
.
しかし、エラーが発生し、「エラー 5047: トランザクション コマンドが有効なシーケンスではありませんでした」と表示されます。
もう少しヒントが必要です:)