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 使っちゃいけない、ってこと??

fiber_new最近の投稿
合同企業説明会出展情報

2024.01.30 更新

.総務ブログ

本社の積雪について

2024.01.25 更新

.総務ブログ

オフィスチェアの張り替え

2024.01.23 更新

.総務ブログ

新年のご挨拶

2024.01.04 更新

.総務ブログ

三愛情報 株式会社

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

電話番号: 059-359-0561