0

データベースの行の変更に基づいてキャッシュを無効にしようとしています。同じデータベースとテーブルを使用して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;

    }

私はSQLServer2005を使用しており、コマンド通知で機能する完全修飾クエリを使用しています。

Linqの他のコードは、同じデータベースとテーブルで完全に機能しているため、ServiceBrokerやその他のアクセス許可が設定されていないことについては意味がありません。この問題を取り除くのを手伝ってください。

4

2 に答える 2

1

この記事には、トラブルシューティングの手順がいくつかあります。不思議な通知と、何かが壊れている理由を理解するのに役立つ、物事がどのように機能するかについての説明があります。機械の各部分が機能することを検証する必要があります。

  • サブスクリプション通知が作成されることを確認してくださいsys.dm_qn_subscriptions
  • 通知が発生することを確認します
  • 通知が配信されることを確認します(ただし、SqlDependencyは常にローカルであるため、このリンクのルーティングとリモート配信に関するすべてを無視しても問題ありません)

無関係なことに、LINQ-to-SQLとクエリ通知を直接使用できます:LinqToCache

于 2010-12-02T19:57:24.347 に答える
0

最善の方法は次のとおりです。SQLログを確認してください。通知に問題が発生している場合は、ログが表示されます。

エラーログは、Program Files \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG\ERRORLOGおよびERRORLOG.nにあります。

私の場合、データベースの復元が原因で問題が発生しました。解決するには、ログに問題が表示された後、実行します。

use DatabaseName EXEC sp_changedbowner 'sa'
于 2011-07-06T22:04:52.057 に答える