SQL Serverデータベースに対してC++で記述しています。私はSQLTransaction
というオブジェクトを持っています。オブジェクトはコードブロックの始めに作成されたときにSQL Serverに「begin transaction」を送ります。ROLLBACK TRANSACTION要求にSQL Serverエラー8114に対応するBEGIN TRANSACTIONがありません。
次に、1つ以上のSQL文をサーバに送信します。すべてが順調に進んだら、SQLTransaction
オブジェクトにフラグを設定して、一連のコマンドがうまくいったことを知らせます。 SQLTransaction
オブジェクトが有効範囲外になると、フラグの状態に応じて、トランザクションのコミットまたはトランザクションのロールバックがサーバーに送信されます。
は、それは次のようになります。私が悪いのコマンドを送信し、これらのブロックのいずれかにSQL文を持っていたし、そのコマンドは、SQLエラー8114
変換エラーデータ型を投げた
varcharから数値{ TSQLTransaction SQLTran(); try { Send(SomeSQLCommand); } catch(EMSError &e) { InformOperator(); return; } SQLTran.commit(); }
私はその後、この特定の問題を修正しました。私が理解できないことは、メッセージで2番目のSQLエラーも受け取っていたということです。
ROLLBACK TRANSACTIONリクエストに対応するBEGIN TRANSACTIONがありません。
このトランザクションが失敗した後にロールバックされる可能性があるかどうかはわかりません。
この全く同じSQLTransaction
オブジェクトは、アプリケーションの多くの場所で使用されていますが、今までは常に正しく動作していたようでした。このSQLエラーは、何らかの理由で扱われているようです。 SQL Serverが自動的にロールバックするエラーがいくつかありますか?私は本当にここで何が起こっているのか理解したいと思います。
おかげ
SQL文の内部にトランザクションロジックを配置できないのはなぜですか? –