1

私は2つの部分からなる小さなアプリケーションを持っています:

  1. データベースに接続して構成データを取得する構成部分。
  2. 構成を使用してデータをデータベースにインポートする Data Importer パーツ。

Data Importer は、トランザクションを使用して複数のスレッドで実行されています。IsolationLevel.Snapshot

設定 SQL コマンドはトランザクションを使用しません。

構成ウィンドウが開いているときに、データ インポーターを同時に実行することはできません。

私の問題は次のように発生します。

1.アプリケーションを開き、構成を確認します。(構成ウィンドウに入って、すべてをスポット チェックします)。2.データのインポートを実行します。3.設定ウィンドウを再度開きます。

インポート後に構成ウィンドウを再度開くと、DataReader からエラーが表示されますが、Snapshot isolation transaction failed accessing database...この DataReader は、トランザクションまたは IsolationLevel がまったく設定されていない SqlConnection から作成されます。

アプリケーションを再起動すると、エラーなしで構成ウィンドウを再度開くことができます。

.Net または SQLServer は IsolationLevel を保持していますか?

すべてに対して新しいトランザクションを作成せずに、設定後に IsolationLevel を変更する方法はありますか?

4

1 に答える 1

1

接続プール経由で分離レベルが引き継がれていると思います。

このKB 記事に記載されているように、これは仕様によるものです。

トランザクション分離レベルを明示的に指定するなど、これを回避する方法があります。

この記事をチェックしてみてください。

于 2013-06-13T05:00:51.880 に答える