我想将 SqlCacheDependency 添加到我的应用程序中。
所以我决定创建 littel tesp 项目并遇到了困难。
我使用 MSSQL 2008。我用表 Lines 创建新数据库并添加了几行。
我执行了:

ALTER DATABASE ForTest SET ENABLE_BROKER

在管理工作室。

Aspx 页面:
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"];
    }
}

我运行此页面并向缓存添加行,然后在管理工作室中添加行,当我单击按钮时,我希望
缓存将被更改但缓存仍然是旧的。
我找不到我做错了什么:(你能给我一些提示我如何解决这个问题吗?

谢谢

更新:
我忘记说在 global.aspx 中我运行:
SqlDependency.Start(
    WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString
);

最佳答案

我有一个类似的问题。这篇文章:Troubleshooting SqlCacheDependency in SQL Server 2008 and SQL Server 2005 当时对我帮助很大。

简而言之:数据库是从备份中恢复的,创建数据库的原始 Windows 用户不再可用。所以我将数据库所有权更改为有效登录名,类似于:

ALTER AUTHORIZATION ON DATABASE::[my_perfect_database_name] TO [sa];

现在它就像一个魅力。

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



这条消息给了我解决问题的 key 。

关于asp.net - SqlCacheDependency 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7427026/

10-10 10:24