我想将SqlCacheDependency添加到我的应用程序中。所以我立志要创建一个小型的tesp项目,并且遇到了困难。我使用MSSQL2008。我使用table Lines创建了新的db,并添加了几行。我执行了:
ALTER DATABASE ForTest SET ENABLE_BROKER 在managmeng studio中。
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"];
}
}我运行这个页面并将行添加到Cache中,然后在managment studio中添加行,当我单击按钮时,我预计缓存将被更改,但缓存仍然是旧的。我找不到我做错了什么:(你能给我一些提示吗?我该如何解决这个问题?
谢谢
更新:我忘记说在global.aspx中我运行:
SqlDependency.Start(
WebConfigurationManager.ConnectionStrings["ForTest"].ConnectionString
);发布于 2011-11-04 22:36:26
我也遇到过类似的问题。本文: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列中找到了下一个数据:
将消息入队到目标队列中时发生异常。错误: 15517,状态: 1。无法作为数据库主体执行,因为主体"dbo“不存在,无法模拟此类型的主体,或者您没有权限。
这条消息给了我一个解决问题的钥匙。
发布于 2012-05-01 02:55:30
代码中有一个错误;
get依赖的定义应该在您执行命令之前放置,否则它将不会订阅您的get命令,那么当您的命令的结果集发生变化时,它也不会收到通知。
SqlCacheDependency empDependency = new SqlCacheDependency(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "Lines"); 发布于 2015-09-19 02:39:45
我还认为在对表进行更改后SqlCacheDependency没有被清除的问题。
事实证明这是因为我的测试方式。我只是通过management studio编辑SQL表中的行,并期待它通知并清除缓存。事实并非如此!如果您正在编辑表,则还必须重新执行select sql以开始清除缓存。
https://stackoverflow.com/questions/7427026
复制相似问题