0

私は、4 つの異なるプロセス (ストアド プロシージャ) を実行する必要がある Windows アプリケーション (WinForms) に取り組んでいます。これには、4 つのプロセスのいずれかがエラーを発生させたインスタンスでプロセス全体をコミットまたはロールバックする機能が含まれます。以下に私の状況を説明します (私は DBA ではないので、SQL について無知であることをお許しください)。

  • Windows アプリ: [プロセス] ボタンをクリックします

  • データベース:開始手順 1 (およびおそらく BEGIN TRANSACTION MyProcessTransaction )

  • Windows アプリ: [プロセス] ボタンをクリックします

  • データベース:開始手順 1 (およびおそらく BEGIN TRANSACTION MyProcessTransaction )

  • Windows アプリ:手順 1 が正常に完了したという通知を受け取り、進行状況バーを更新します。

  • データベース:手順 2 を開始します (そして、どういうわけかMyProcessTransactionの下にまだカプセル化されています)

  • Windows アプリ:手順 2 から正常に完了したという通知を受け取り、進行状況バーを更新します。

  • データベース:手順 3 を開始し (何らかの形でMyProcessTransactionの下にまだカプセル化されています)、エラーを発生させ、トランザクションMyProcessTransactionをロールバックします。

これは可能ですか?4 つのクエリ ウィンドウを試し、最初のウィンドウでトランザクションを開始してから、他のウィンドウに try catch を配置し、これをシミュレートするためにそれぞれで作業を実行しようとしましたが、4 つ目のウィンドウに到達して意図的にエラーを発生させたときに、例外を受け取りました。 ROLLBACKできるBEGIN TRANSACTIONはありませんでした。助言がありますか?

4

1 に答える 1

0

さて、いつものように、掘り下げた後、私は自分に合った解決策を見つけました. それが唯一の解決策というわけではありませんが、効率的で機能します。

https://stackoverflow.com/a/13228090/176806

TRANSACTION が接続固有であることを理解するために 2 と 2 を組み合わせたことはないので、提案どおりに接続オブジェクトを介してトランザクションを作成し、そのトランザクションを呼び出しから呼び出しに渡し、エラーのインスタンスでロールバックしましたその取引。誰かが他の何かに答えたいと感じた場合、私はまだどんな提案も受け付けています.

于 2012-12-04T18:18:03.707 に答える