2012年6月6日水曜日

SqlConnection.BeginTransaction()でエラー

下記のようなコードを書いたら sqlConnection.BeginTransaction()でInvalidOperationExceptionが発生。
try {
    using (SqlConnection sqlConnection = new SqlConnection(this.connctionString))
    using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
    using (SqlTransaction sqlTransaction = sqlConnection.BeginTransaction(System.Data.IsolationLevel.Serializable)) {                
        sqlConnection.Open();
        sqlCommand.Transaction = sqlTransaction;
        int ret = -1;
        sqlCommand.CommandText = "DELETE FROM T_Hoge WHERE Piyo = '" + piyo + "';";
        ret = sqlCommand.ExecuteNonQuery();
        sqlTransaction.Commit();
    }
catch (Exception e) {
    throw;
}
"操作が無効です。接続は閉じています。"とか言われちゃったんで http://msdn.microsoft.com/ja-jp/library/2k2hy99x%28v=vs.80%29.aspx を見てみるとBeginTransaction()の前にSqlConnection.Open()しとかなきゃいけなかった。 うっかりうっかり。 トランザクション周りはロックやら結構気を付けないといけないね。 まあマルチスレッドでのアトミック性みたいな話と大体同じだとは思うけども。

0 件のコメント:

コメントを投稿