Loading...

三愛情報ブログ

三愛情報の日々の活動を掲載しております。

2009年2月27日 更新

社員ブログ

SQL CLR で、TransactionScope

SQL CLR で、TransactionScope を使用している。
ひとつの SQL CLR から いくつかの SQL CLR を 呼び出して処理しているのだが、
ループで何度も同じブツを呼び出すと以下のエラーが出た。

——————————————————————————–
System.Data.SqlClient.SqlException: 現在のトランザクションのコミットおよび
ログ ファイルに書き込む操作はサポートできません。
トランザクションをロールバックしてください。
場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQuerySmi(Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.InternalExceptionNonQuery
(DbAsyncResult result, String methodName, Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
場所 XXX99999.StoredProcedures.XXX99999()

メッセージ 3991、レベル 16、状態 1、プロシージャ XXX99999、行 0
ユーザー定義のルーチン、トリガ、または集計 “XXX99999” を入力する前は
アクティブであったコンテキスト トランザクションが内部で終了しました。
このような動作は許可されません。
厳密なトランザクションの入れ子を設定するようにアプリケーションのロジックを変更してください。
——————————————————————————–

・・・。
アプリケーションのロジックを変更してください、なんてメッセージが
返ってくるなんて、時代も変わりましたね。

いまいち意味が分からないけれど、
エラーでアベンドする場所が、実行するたびに変わるので
これはプログラム自体の不具合では無さそう。

というわけで、暗黙なトランザクションではなく、【厳密】なトランザクションを目指して
System.Data.SqlClient.SqlTransaction を使用する方法に直してみました。

はい、エラー回避です。
これって、コアな処理では、TransactionScope 使っちゃいけない、ってこと??

三愛情報 株式会社

〒510-0074 三重県四日市市鵜の森1丁目10番7号

電話番号: 059-359-0561