DOBON.NET DOBON.NETプログラミング掲示板過去ログ

COMMITを繰り返すと、例外が発生してしまう

環境/言語:[開発環境XP VB.NET]
分類:[.NET]

お世話になります。
以下のようにテーブルの作成・削除を連続で行うと、なぜか例外が起こります。
テーブルの作成を2つ書いた際も同じです。
恐らく私の考えが違っているのだと思いますが、commitを2回繰り返すといけないのでしょうか?


'テーブル作成

Try

strSQL = "CREATE TABLE Test_t ( projno decimal(3) NOT NULL,
pname varchar(5), budget decimal(7,2) DEFAULT 2000)"

command.Transaction = transaction
command.CommandText = strSQL
returnValue = command.ExecuteNonQuery()
If returnValue = 1 Then
MessageBox.Show("正常に更新されました。", "  
   FormBom.UpdateXSEIK", MessageBoxButtons.OK,
MessageBoxIcon.Information)
End If
transaction.Commit()
Catch ex As Exception
transaction.Rollback()
MessageBox.Show("システム例外が発生しました。" & vbCrLf &
ex.ToString, "FormBom.UpdateXSEIK",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try


'テーブル削除
Try
strSQL = "DROP TABLE Test_t "

command.Transaction = transaction
command.CommandText = strSQL
returnValue = command.ExecuteNonQuery()
If returnValue = 1 Then
MessageBox.Show("正常に削除されました。", "
        FormBom.UpdateXSEIK", MessageBoxButtons.OK,
        MessageBoxIcon.Information)
End If
transaction.Commit()

Catch ex As Exception
transaction.Rollback() <<< 例外が起こってここで止まります。
MessageBox.Show("システム例外が発生しました(削除)"
      & vbCrLf & ex2.ToString, " FormBom.UpdateXSEIK",
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
KYOUさん

Commitをおこなったら、Transactionを再度開始しないと2度目はエラーになります。
テーブル削除前にBeginTransactionを行うとエラーにはならないのではないでしょうか?
そもそも、提示の処理でTransaction処理が必要だとは思いませんが、
他に処理が有るものとして考えておきます。
きいよさんアドバイスありがとうございます。

”BeginTransaction”を入れたところ、問題なく更新できるようになりました。

ありがとうございました。


■No23773に返信(きいよさんの記事)
> KYOUさん
>
> Commitをおこなったら、Transactionを再度開始しないと2度目はエラーになります。
> テーブル削除前にBeginTransactionを行うとエラーにはならないのではないでしょうか?
> そもそも、提示の処理でTransaction処理が必要だとは思いませんが、
> 他に処理が有るものとして考えておきます。
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板