.NETでMySQL用ADO.Netドライバを使用する場合は、を使用してMySqlCommand
オブジェクトにトランザクションを割り当てる必要がありますか、またはMySqlConnection
オブジェクトにオープントランザクションがあるだけで十分ですか?以下のコードでは、トランザクションを割り当てずに別のMySqlCommand
オブジェクトで2つのクエリを実行し、トランザクションをロールバックして接続を開始します。この例では、どちらもUPDATE
がデータベースにコミットされていません。.NET MySqlCommand.Transaction - その目的は何ですか?
MySqlConnection oConn = new MySqlConnection("Server=spet-il-cent-02;Port=3306;Database=test;Uid=test;Pwd=test123;CharSet=utf8;");
oConn.Open();
MySqlTransaction oTran = oConn.BeginTransaction();
MySqlCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = "UPDATE testing SET testBalance = testBalance + 10 WHERE testID = 1";
oCmd.ExecuteNonQuery();
oCmd = oConn.CreateCommand();
oCmd.CommandText = "UPDATE testing SET testBalance = testBalance - 10 WHERE testID = 2";
oCmd.ExecuteNonQuery();
oTran.Rollback();
oConn.Close();
実行時にoCmd
のTransaction
プロパティを確認すると、私はそれがnull
であることがわかります。
私がoTran.Commit()
を呼び出すと明らかに、両方ともUPDATE
ステートメントがコミットされます。だからMySqlCommand
オブジェクトのTransaction
プロパティの目的は何ですか?単一の接続で複数の同時トランザクションを許可するのですか(異なるコマンドは異なるトランザクションにバインドされ、お互いに関係なくロールバックまたはコミットできます)。