2012-01-26 10 views
1

C#とMYSQLを使用していて、ロールバックが機能していません。私は、テーブルには第三存在していないとキャッチで私はロールバックをやっているが、すべてをロールバックするとしながら、ここでC#でロールバックが機能しない

  string id = dataGridView1.Rows[index].Cells[0].Value.ToString(); 
     string strDelete = "DELETE FROM user WHERE id = " + id; 
     OdbcTransaction transaction = null; 
     OdbcCommand cmd = new OdbcCommand(); 
     cmd.Connection = Singleton.Instance.GetConnection(); 
     transaction = Singleton.Instance.GetConnection().BeginTransaction(); 
     cmd.Transaction = transaction; 
     try 
     { 
      cmd.CommandText = strDelete; 
      cmd.ExecuteNonQuery(); 
      // delete from userdata 
      strDelete = "DELETE FROM userdata WHERE id = " + id; 
      cmd.CommandText = strDelete; 
      cmd.ExecuteNonQuery(); 
      // delete from usersystem 
      strDelete = "DELETE FROM usersystem WHERE id = " + id; 
      cmd.CommandText = strDelete; 
      cmd.ExecuteNonQuery(); 
      // delete from user systemstatus. here table don't exists, will throw 
      // exception 
      strDelete = "DELETE FROM usersystemstatusAAAA WHERE id = " + id; 
      cmd.CommandText = strDelete; 
      cmd.ExecuteNonQuery(); 
      transaction.Commit(); 
     } 
     catch (Exception ex) 
     { 
      // Attempt to roll back the transaction. 
      try 
      { 
       transaction.Rollback(); 
      } 
      catch (Exception ex2) 
      { 
       Console.WriteLine(" Message: {0}", ex2.Message); 
      } 

     } 

最初の2つのSQLステートメントがコミットされている間、そののみ第三のために起こってSQLを削除する3つのDELETE文を持っています。

+0

のMyISAMを使用していますか? SQLで実行するとロールバックは機能しますか? – Sjoerd

答えて

4

MySQLデータベースのストレージタイプを確認する必要があります。すべてのストレージがトランザクションであるわけではありません。例えば、InnoDBはトランザクションを持ちますが、MyISAMはトランザクションを持ちません。あなたは、ストレージエンジンとしてのMyISAMやInnoDBのをInnoDBの MyISAM versus InnoDB

2

2番目の接続があると思われ、connection/transaction /コマンドで混乱が生じています。あなたが実際に代わりに使用している接続でトランザクションを開始してみてください。

cmd.Connection = Singleton.Instance.GetConnection(); 
transaction = cmd.Connection.BeginTransaction(); 

また、あなたがここにusingブロックで見たいと思うかもしれません。

+0

私はテストしましたが、それもうまくいきませんでした。 – CrazyC

+0

@CrazyCよく...他のコメントによると...あなたのストレージは実際にトランザクションですか? –

+0

申し訳ありませんが、どうすれば確認できますか? – CrazyC

関連する問題