sql >> データベース >  >> RDS >> Sqlserver

(無関係?) トランザクションで IsolationLevel.ReadUncommitted を使用すると、SqlDependency サブスクリプションが機能しない

    SqlDependency 取得おめでとうございます (私はまったく皮肉を言っているわけではありません。多くの人がこれで失敗しました)。

    ここで、「通知用クエリの作成」をお読みください。 MSDN のトピック。この要件を含め、クエリが通知に対して有効な条件が表示されます。

    方法の基本 SqlDependency について書きました 作品 、多分いくつかの誤解を解くでしょう。また、サイド ノードとして、Linq を使用しているため、LinqToCache Linq 間のブリッジを提供します クエリと SqlDependency .

    別のコメント:Start() しないでください および Stop() あなたの SqlDependency ニリーウィリー。すぐに後悔するでしょう。 Start() アプリの起動時に一度だけ呼び出され、Stop() アプリのシャットダウン中に 1 回だけ (厳密に言えば、アプリドメインのロードとアンロード中に)。

    さて、あなたの問題について:重要な分離レベルは、notified query の 1 つです .つまり、サブスクリプションをアタッチするクエリではなく、 UPDATE を実行するクエリ (ダーティ リードの下で UPDATE を実行することの賢明さについてはコメントしません... または 何にでもダーティ リードを使用する知恵 )。私が知る限り、あなたが示すコードは、read_uncommitted の下にクエリを投稿するべきではありません。 SET TRANSACTION ISOLATION ... を発行した後 そのセッションの後続のすべてのトランザクション (つまり、すべてのステートメント) は、その分離レベルの下になります。 (DataContext の破棄によって) 接続を閉じてから、別の接続を使用します。 ...接続プールを使用しない限り。無実の犠牲者のクラブへようこそ:)。 接続プーリングが Close() 全体で分離レベルの変更をリークする /Open() 境界 .そして、それはあなたの問題です。いくつかの簡単な解決策があります:

    そして、私たちが話している間、これも読む必要があります:テーブルをキューとして使用 .



    1. pg_topを使用したPostgreSQLインスタンスの動的監視

    2. C#を介してOracleデータベースに接続しますか?

    3. Oracle11gでのXMLtable

    4. 参照時にクライアントにSQLNCLI10プロバイダーがインストールされているかどうかを確認するにはどうすればよいですか?