現在、バックエンド データベースとして MySql を使用して C# アプリケーションを開発しています。
残念ながら、説明できない有線の動作が見つかりました。
トランザクションを使用して、複数のクエリを「結合」して、すべてのコマンドのみが実行されるか、何も実行されないようにしたいと考えていました。
しかし、私のコーディングミスにより、トランザクション中に未処理の例外が発生しました。
トランザクションについての私の理解は、そのような場合、トランザクションはロールバックされるということです。
それにもかかわらず、未処理の例外によるクラッシュのために、Mysql はデフォルトで AutoCommit を有効にして、切断後にコミットするように見えることがわかりました。
だから私は実行してそれを無効にしようとしましたSET autocommit = 0
しかし、これはうまくいきません。
編集: 次のコードを使用してトランザクションを作成しました:
_transaction = _mysqlConnection.BeginTransaction();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = _mysqlConnection;
cmd.Transaction = _transaction
他の人は、BEGIN を使用するとこの問題が解決するはずだと言いましたが、そうではありません。Mysql ログでは、次のクエリが実行されます。
239 Connect user@localhost on gssm
239 Query SHOW VARIABLES
239 Query SHOW COLLATION
239 Query SET character_set_results=NULL
239 Init DB db
239 Query SET autocommit = 0
239 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
239 Query BEGIN
239 Query INSERT INTO TestTable (KeyField, Value) VALUES ('foo', 'bar')
もちろん、未処理の例外が発生しないようにコードを修正する必要がありますが、Mysql がこれを行うのを防ぐ方法はありますか?
ありがとう!
クリス