0

我们正在尝试实现 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 = new SqlCacheDependency(connString, "select * from dbo.state_lookup where 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 版:企业试用版

Alachisoft SDK 版本:4.9.1.1

4

1 回答 1

0

在使用 NCache SQLDependency 时,您需要考虑一些事情,我在下面列出了它们。

• NCache SQLDependency 利用 SQL 代理服务根据通知使缓存中的项目无效并删除。请确保您已为您的数据库启用代理服务,以便 NCache SQLDependency 可以正常工作,而不会出现此处步骤中提到的任何问题。

• 此外,请注意,当您为 SQLDependency 创建查询时,SQLDependency 对支持的语句有一些限制。NCache SQLDependency 特性也继承了此限制,因为 NCache 依赖于 SQL 代理。主要限制之一是 SELECT 语句,即“该语句不能使用星号 ( ) 或 table_name.语法来指定列。”。您的 SQLDependency 查询应遵循 Microsoft 提到的所有规则和要求。

• 有关在 SQL Server 上创建通知查询的完整要求列表,请访问以下 MSDN 站点:https ://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008- r2/ms181122(v=sql.105)

• 此外,请注意,每当 NCache SQLDependency 注册失败时,相应的项目(为其添加了依赖项)会立即删除,并且会在服务器日志中记录错误消息。请查看您的服务器日志,您应该能够看到一条错误条目,指出 SQL Broker 由于 SQL 查询无效而无法建立 SQLDependency。

一旦您解决了上述所有项目,您的 SQLDependency 应该可以完美运行。

于 2019-02-27T06:53:42.727 回答