0

我正在尝试根据数据库行的更改使缓存无效。我在使用相同数据库和表的 linq 做同样的事情时取得了成功,但我无法以基本方式做到这一点:

这是我写的代码,请帮忙:

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 中的其他代码完美地使用相同的数据库和表,因此没有设置 Service Broker 或其他权限没有意义。请帮助我摆脱这个问题。

4

2 回答 2

1

这篇文章有一些故障排除步骤神秘通知,以及事情如何工作的解释,这有助于试图理解为什么会出现问题。您应该验证每台机器是否正常工作:

  • 检查订阅通知是否在sys.dm_qn_subscriptions
  • 检查通知是否被触发
  • 检查通知是否已送达(不过,您可以放心地忽略此链接中有关路由和远程送达的所有内容,因为 SqlDependency 始终是本地的)

在不相关的说明中,您可以直接使用 LINQ-to-SQL 和查询通知:LinqToCache

于 2010-12-02T19:57:24.347 回答
0

最好的办法是:查看 sql 日志,如果 Notifications 发生任何问题,日志会显示!

错误日志位于 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG 和 ERRORLOG.n

在我的情况下,由于数据库恢复而出现问题,要解决,日志显示问题,然后,我执行

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