Alachisoft Ncache SqlCacheDependency通过存储过程添加依赖项

时间:2019-02-19 13:28:07

标签: c# .net ncache

我们正在尝试实现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

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应该可以正常工作。