我想将SqlCacheDependency添加到我的应用程序. 因此,我决定创建小型tesp项目并面临困难. 我使用MSSQL 2008.我使用表格行创建新的数据库并添加了几行. 我执行了: ALTER DATABASE ForTest SET ENABLE_
因此,我决定创建小型tesp项目并面临困难.
我使用MSSQL 2008.我使用表格行创建新的数据库并添加了几行.
我执行了:
ALTER DATABASE ForTest SET ENABLE_BROKER
在managmeng工作室.
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添加行,然后在管理工作室中添加行,当我点击按钮时,我期待
缓存将被更改但缓存仍然是旧的.
我找不到我做错了什么:(你能给我一些提示,我怎么能解决这个问题?
谢谢
更新:
我伪造说在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列中的下一个数据:
An exception occurred while enqueueing a message in the target queue.
Error: 15517, State: 1. Cannot execute as the database principal
because the principal “dbo” does not exist, this type of principal
cannot be impersonated, or you do not have permission.
这条消息给了我解决问题的关键.