缓和SqlCacheDependency(ASP.NET 视)
-
20-09-2019 - |
题
我们需要返回的子集的记录和对我们使用的以下命令:
using (SqlCommand command = new SqlCommand(
"SELECT ID, Name, Flag, IsDefault FROM (SELECT ROW_NUMBER() OVER (ORDER BY @OrderBy DESC) as Row, ID, Name, Flag, IsDefault FROM dbo.Languages) results WHERE Row BETWEEN ((@Page - 1) * @ItemsPerPage + 1) AND (@Page * @ItemsPerPage)",
connection))
我设置一个SqlCacheDependency宣布这样的:
SqlCacheDependency cacheDependency = new SqlCacheDependency(command);
但之后立即我运行命令。ExecuteReader()指令, 已经发生改变 基酒店的SqlCacheDependency对象变成真正的我虽然没有变化查询的结果以任何方式!而且,正因为如此,导致这种查询不是保持在高速缓存。
HttpRuntime.Cache.Insert( cacheKey, list, cacheDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(AppConfiguration.CacheExpiration.VeryLowActivity));
这是因为该命令的有2个选择声明?它是ROW_NUMBER()?如果是,是否有任何其他方式分的结果?
请帮帮忙!之后太多时间,一点点,将不胜感激!谢谢你
解决方案
运行到了同样的问题,并找到同样的答案网上没有任何帮助,我是,另xml无效subsicription响应从分析器。
我发现一个例子msdn上的支持网站,有一个稍微不同的顺序的代码。当我试过我意识到这个问题-不要打开你的连接对象之后已经创建了命令对象和高速缓存依赖的对象。这里是命令你必须跟着,一切都会好的:
- 一定要启用通知(SqlCahceDependencyAdmin)和运行SqlDependency.开始第一
- 创建连接的对象
- 创建该命令对象和分配命令文本、类型和连接对象(任何组合构造、设置的特性,或者使用CreateCommand).
- 创建sql缓存依赖的对象
- 打开连接的对象
- 执行查询
- 添加项目,以缓使用依赖性。
如果按照这种顺序,并按照所有其他要求你的选择声明,没有任何权限的问题,这将工作!
我认为这个问题与如何。净框架的管理连接时,具体是什么设置的设置。我试图重写这在我sql command测试,但是它从来没有工作。这只是猜测-我知道的是改变了立即解决的问题。
我能够拼凑在一起从以下来msdn员额。
这个员额是一个更常见的原因无效订购,并显示了如何。净客户设置的特性,是在相反的通知要求。
然后这个职位是从一个用户,像我一样,减少了他的代码来最简单的格式。我原来的码的模式是相似的。
然后我发现这个职位,也是一个非常简单的减少的问题,他只是一个简单的问题需要2部分的名称表。在他的情况下,建议解决的问题。后看着他的代码,我注意到主要差别是等待开发连接的对象,直到后命令对象和所依赖的对象。我唯一的假设是引擎盖下(我还没有开始反射器,以检查所以只有一种假定)的连接目的是打开不同或顺序的事件和指令发生的方式不同,因为这种关联。
我希望这可以帮助别人在一个类似的问题。
其他提示
只是一个猜测,但它可能是因为你的SELECT
声明不具有ORDER BY
条款?
如果您没有指定明确排序则有可能为查询到每次运行时返回以任何顺序的结果。也许这是造成SqlCacheDependency
对象认为结果已经改变。
尝试添加ORDER BY
子句:
SELECT ID, Name, Flag, IsDefault
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY @OrderBy DESC) AS Row,
ID, Name, Flag, IsDefault
FROM dbo.Languages
) AS results
WHERE Row BETWEEN ((@Page - 1) * @ItemsPerPage + 1) AND (@Page * @ItemsPerPage)
ORDER BY Row
我不是专家的SqlCacheDependency,事实上,我发现这个问题,同时寻找答案,以我自己的问题吧!不过,我相信你的SqlCacheDependency不工作的原因是因为你的SQL包含嵌套子查询。
看看文档,列出你可以/不可以在SQL中使用:的用于通知创建查询
“......语句不能包含子查询,外连接,或自连接......”的
我也发现一个人在展鹏一些宝贵的故障排除信息在这里:的使用并监控SQL 2005查询通知,帮助我解决我自己的问题:通过使用SQL事件探查器跟踪他暗示QN事件,我能发现我的连接是使用“SET ARITHABORT OFF”选项不正确,导致我的通知失败。