1 つの複数行の INSERT ステートメント (300 程度の値のセット) があり、それをオール オア ナッシング方式で MySQL データベースにコミットしたいと考えています。
insert into table VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9);
場合によっては、コマンド内の一連の値がテーブルの基準を満たさないことがあります (重複キーなど)。その場合、以前のセットをデータベースに追加したくありません。これを次のコードで実装しましたが、ロールバック コマンドは違いを生んでいないようです。私はこのドキュメントを使用しました: http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html
Dim transaction As MySqlTransaction = sqlConnection.BeginTransaction()
sqlCommand = New MySqlCommand(insertStr, sqlConnection, transaction)
Try
sqlCommand.ExecuteNonQuery()
Catch ex As Exception
writeToLog("EXCEPTION: " & ex.Message & vbNewLine)
writeToLog("Could not execute " & sqlCmd & vbNewLine)
Try
transaction.Rollback()
writeToLog("All statements were rolled back." & vbNewLine)
Return False
Catch rollbackEx As Exception
writeToLog("EXCEPTION: " & rollbackEx.Message & vbNewLine)
writeToLog("All statements were not rolled back." & vbNewLine)
Return False
End Try
End Try
transaction.commit()
DUPLICATE KEY 例外がスローされ、Rollback Exception はスローされず、重複キーまでのすべての値のセットがデータベースにコミットされます。私は何を間違っていますか?