我们正在尝试实现SqlCacheDependency并通过存储过程添加依赖项时,它将对象添加到缓存后立即删除该对象。它给出CacheItemRemovedReason为4。
我们使用了下面提到的链接中提供的数据库同步示例。
http://www.alachisoft.com/resources/samples/
string storedProcName = "dbo.TestStoredProc1";
SqlCmdParams sqlParams = new SqlCmdParams();
sqlParams.Value = prod.ProductID;
//sqlParams.
Dictionary<string, SqlCmdParams> prms = new Dictionary<string, SqlCmdParams>();
prms.Add("ID", sqlParams);
_cache.Add(prod.ProductID.ToString(), item,DSWriteOption.None,null);
item.Dependency =新的SqlCacheDependency(connString,“从dbo.state_lookup中选择*,其中state_id =” + prod.ProductID.ToString());
Database Synchronizationpublic void OnCacheDataModification(string key, CacheEventArg args)
{
switch (args.EventType)
{
case EventType.ItemAdded:
// Key has been added to the cache
Console.WriteLine(key + " Item Added");
break;
case EventType.ItemUpdated:
Console.WriteLine(key + " Item Updated");
break;
case EventType.ItemRemoved:
break;
}
我添加了项目更改侦听器,进入ItemAdded部分后立即转到ItemRemoved部分。仅当数据库中的数据发生更改时,才调用被删除项目的回调。
SQL Server版本:Microsoft SQL Server 2008 R2(SP2)
Alachisoft Edition:企业试用版
Alachisoft SDK版本:4.9.1.1
答案 0 :(得分:0)
使用NCache SQLDependency时需要注意一些事项,下面列出了它们。
•NCache SQLDependency使用SQL Broker服务根据通知使缓存中的项目无效并删除它们。请确保已为数据库启用代理服务,以便NCache SQLDependency可以正常工作,而不会出现此处步骤中提到的任何问题。
•此外,请注意,在创建SQLDependency查询时,SQLDependency对所支持的语句有一些限制。由于NCache依赖于SQL Broker,因此NCache SQLDependency功能也继承了此限制。 SELECT语句是主要限制之一,它是“该语句不得使用星号()或table_name。语法指定列。”您的SQLDependency查询应遵循Microsoft提到的所有规则和要求。
•在以下MSDN站点上可以找到在SQL Server上创建查询查询的要求的完整列表:https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms181122(v=sql.105)
•此外,请注意,每当NCache SQLDependency无法注册时,即会立即删除相应的项(已为其添加了依赖性),并且在服务器日志中记录了一条错误消息。请检查您的服务器日志,您应该能够看到一条错误条目,指出由于无效的SQL查询,SQL Broker无法建立SQLDependency。
解决了上述所有问题后,您的SQLDependency应该可以正常工作。