首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlCacheDependency不工作

SqlCacheDependency不工作
EN

Stack Overflow用户
提问于 2011-09-15 15:03:05
回答 3查看 3.2K关注 0票数 3

我想将SqlCacheDependency添加到我的应用程序中。所以我立志要创建一个小型的tesp项目,并且遇到了困难。我使用MSSQL2008。我使用table Lines创建了新的db,并添加了几行。我执行了:

代码语言:javascript
复制
ALTER DATABASE ForTest SET ENABLE_BROKER 

在managmeng studio中。

Aspx页面:

代码语言:javascript
复制
public partial class WebForm1 : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
       if (Cache["Lines"] == null)
       {
         string connectionString = 
           WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString;
         SqlConnection con = new SqlConnection(connectionString);
         string query = "SELECT dbo.Lines.Id, dbo.Lines.Value FROM dbo.Lines";
         SqlCommand cmd = new SqlCommand(query, con);
         SqlDataAdapter adapter = new SqlDataAdapter(cmd);

         DataSet ds = new DataSet();
         adapter.Fill(ds, "Lines"); 

         SqlCacheDependency empDependency = new SqlCacheDependency(cmd);
         Cache.Insert("Lines", ds, empDependency); 
       }
      }
    }

    protected void btnResult_OnClick(object sender, EventArgs e)
    {
      var result = Cache["Lines"];
    }
}

我运行这个页面并将行添加到Cache中,然后在managment studio中添加行,当我单击按钮时,我预计缓存将被更改,但缓存仍然是旧的。我找不到我做错了什么:(你能给我一些提示吗?我该如何解决这个问题?

谢谢

更新:我忘记说在global.aspx中我运行:

代码语言:javascript
复制
SqlDependency.Start(
    WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString
);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-04 22:36:26

我也遇到过类似的问题。本文:Troubleshooting SqlCacheDependency in SQL Server 2008 and SQL Server 2005当时帮了我很多。

简而言之:数据库是从备份中恢复的,创建数据库的原始Windows用户不再可用。因此,我将数据库所有权更改为有效的登录,如下所示:

代码语言:javascript
复制
ALTER AUTHORIZATION ON DATABASE::[my_perfect_database_name] TO [sa];

现在它就像一种护身符。

我是如何找到问题的根源的?我运行了查询SELECT * FROM sys.transmission_queue,并在transmission_status列中找到了下一个数据:

将消息入队到目标队列中时发生异常。错误: 15517,状态: 1。无法作为数据库主体执行,因为主体"dbo“不存在,无法模拟此类型的主体,或者您没有权限。

这条消息给了我一个解决问题的钥匙。

票数 7
EN

Stack Overflow用户

发布于 2012-05-01 02:55:30

代码中有一个错误;

get依赖的定义应该在您执行命令之前放置,否则它将不会订阅您的get命令,那么当您的命令的结果集发生变化时,它也不会收到通知。

代码语言:javascript
复制
SqlCacheDependency empDependency = new SqlCacheDependency(cmd);

DataSet ds = new DataSet();
adapter.Fill(ds, "Lines"); 
票数 0
EN

Stack Overflow用户

发布于 2015-09-19 02:39:45

我还认为在对表进行更改后SqlCacheDependency没有被清除的问题。

事实证明这是因为我的测试方式。我只是通过management studio编辑SQL表中的行,并期待它通知并清除缓存。事实并非如此!如果您正在编辑表,则还必须重新执行select sql以开始清除缓存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7427026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档