SQLクエリに依存するキャッシュを無効にすることができません
-
30-09-2019 - |
質問
データベースの行の変更に基づいて、キャッシュを無効にしようとしています。同じデータベースとテーブルでLINQで同じことをしながら成功を収めましたが、IAMは基本的な方法でそれを行うことができません。
これが私が書いたコードです、助けてください:
public DataSet GetData(string sqlCmd)
{
string connectionStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
string cacheKey = "test123";
DataSet ds = (DataSet)HttpRuntime.Cache.Get(cacheKey);
if (ds != null)
{
return ds;
}
SqlCacheDependency sqldep = null;
SqlConnection conn = new SqlConnection(connectionStr);
SqlCommand cmd = new SqlCommand(sqlCmd, conn);
cmd.Notification = null;
cmd.NotificationAutoEnlist = true;
SqlDataAdapter sqlAd = new SqlDataAdapter(cmd);
ds = new DataSet();
sqlAd.Fill(ds);
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connectionStr);
string NotificationTable = "TblMetaData";
if (!System.Web.Caching.SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionStr).Contains(NotificationTable))
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(connectionStr, NotificationTable);
sqldep = new SqlCacheDependency(cmd);
HttpRuntime.Cache.Insert(cacheKey, ds, sqldep);
return ds;
}
SQL Server 2005を使用しており、コマンド通知で動作できる完全に適格なクエリを使用しています。
LINQの私の他のコードは、同じデータベースとテーブルで完全に機能しているため、サービスブローカーや設定されていない他のアクセス許可については意味がありません。この問題を取り除くのを手伝ってください。
解決
この記事には、いくつかのトラブルシューティング手順があります 神秘的な通知, 、何かが壊れている理由を理解しようとする場所に役立つ方法がどのように機能するかとともに。機械の各部分が機能することを検証する必要があります。
- サブスクリプション通知が作成されることを確認してください
sys.dm_qn_subscriptions
- 通知が得られることを確認してください 解雇
- 通知が得られることを確認してください 配達 (ただし、このリンクのルーティングとリモート配信に関するすべてを安全に無視できます。SQLDEPENDENTは常にローカルであるため)
無関係なメモでは、LINQ-to-SQLとクエリ通知を直接使用できます。 linqtocache.
他のヒント
最善のことは、SQLログをご覧ください。通知の問題が発生している場合は、ログが表示されます。
エラーログは、プログラムファイル Microsoft SQL Server MSSQL.N MSSQL log errorLogおよびerrorlog.nにあります。
私の場合、問題はデータベースの復元のために発生しました、解決するために、ログは私に問題を示しました、そして、私は実行します
use DatabaseName EXEC sp_changedbowner 'sa'
所属していません StackOverflow