我想将 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/