- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不明白为什么我的 SqlCacheDependency
对象的 HasChanged
值最初从命令执行返回为 false,但在它从数据库,值更改为 true。
有时这发生在项目被插入缓存之前,导致缓存立即丢弃它,有时它在插入之后,我可以获取一个枚举器,它看到缓存中的键,但在我循环到那个之前缓存中的项目已被删除。
存储过程:
ALTER PROCEDURE [dbo].[ntz_dal_ER_X_Note_SelectAllWER_ID]
@ER_ID int
AS
BEGIN
SELECT
ER_X_Note_ID,
ER_ID,
Note_ID
FROM dbo.ER_X_Note e
WHERE
ER_ID = @ER_ID
END
数据库是 MS SQL Server 2008,启用了代理服务,一些输出缓存并保持缓存状态。例如,这个工作得很好:
ALTER PROC [dbo].[ntz_dal_GetCacheControllerByEntityName] (
@Name varchar(50)
) AS
BEGIN
SELECT
CacheController_ID,
EntityName,
CacheEnabled,
Expiration
From dbo.CacheController cc
WHERE EntityName = @Name
END
调用有问题的 SPROC 的代码失败了:
DataSet toReturn;
Hashtable paramHash = new Hashtable();
paramHash.Add("ER_ID", _eR_ID.IsNull ? null : _eR_ID.Value.ToString());
string cacheName = BuildCacheString("ntz_dal_ER_X_Note_SelectAllWER_ID", paramHash);
toReturn = (DataSet)GetFromCache(cacheName);
if (toReturn == null)
{
// Set up parameters (1 input and 0 output)
SqlParameter[] arParms = {
new SqlParameter("@ER_ID", _eR_ID),
};
SqlCacheDependency scd;
// Execute query.
toReturn = _dbTransaction != null
? _dbConnection.ExecuteDataset(_dbTransaction, "dbo.[ntz_dal_ER_X_Note_SelectAllWER_ID]", out scd, arParms)
: _dbConnection.ExecuteDataset("dbo.[ntz_dal_ER_X_Note_SelectAllWER_ID]", out scd, arParms);
AddToCache(cacheName, toReturn, scd);
}
return toReturn;
有效的代码
const string sprocName = "ntz_dal_GetCacheControllerByEntityName";
string cacheControlPrefix = "CacheController_" + CachePrefix;
CacheControl controller = (CacheControl)_cache[cacheControlPrefix];
if (controller == null)
{
try
{
SqlParameter[] arParms = {
new SqlParameter("@Name", CachePrefix),
};
SqlCacheDependency sqlCacheDependency;
// Execute query.
DataSet result = _dbTransaction != null
? _dbConnection.ExecuteDataset(_dbTransaction, sprocName, out sqlCacheDependency, arParms)
: _dbConnection.ExecuteDataset(sprocName, out sqlCacheDependency, arParms);
controller = result.Tables[0].Rows.Count == 0
? new CacheControl(false)
: new CacheControl(result.Tables[0].Rows[0]);
_cache.Insert(cacheControlPrefix, controller, sqlCacheDependency);
}
catch (Exception ex)
{
// if sproc retreival fails cache the result of false so we don't keep trying
// this is the only case where it can be added with no expiration date
controller = new CacheControl(false);
// direct cache insert, no dependency, no expiration, never try again for this entity
if (HttpContext.Current != null && UseCaching && _cache != null) _cache.Insert(cacheControlPrefix, controller);
}
}
return controller;
AddToCache
方法被重载并且有更多的测试;工作方法中的直接 _cache.Insert
是为了绕过那些其他测试。工作代码有助于确定是否应该进行数据库缓存。
您可以看到,当最初检索到“非工作”数据时,一切正常:
但是在那个点之后的某个随机位置,在这种情况下,只是进入下一个方法
然而数据根本没有改变;我是唯一接触该数据库实例的人。
最佳答案
它真的非常简单,简单到我完全忽略了它。
在这篇文章中Creating a Query for Notification ,我 DID 多次搜索,它清楚地指出:
SET Option Settings
When a SELECT statement is executed under a notification request, theconnection that submits the request must have the options for theconnection set as follows:
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
CONCAT_NULL_YIELDS_NULL ON
QUOTED_IDENTIFIER ON
NUMERIC_ROUNDABORT OFF
ARITHABORT ON
好吧,我读了又读又读了存储过程,但我仍然没有看到 ANSI_NULLS 和 QUOTED_IDENTIFIER 都是“OFF”,而不是“ON”。
我的数据集现在正在缓存和正确保留数据,没有错误的变化指示。
关于c# - 为什么我的 SqlCacheDependency HasChanged 返回 false 但几乎是在更改为 true 之后立即返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607076/
我读过的几乎所有教程似乎都错误地设置了 SqlCacheDependency。我相信他们通常会混淆过时的轮询方法和查询通知方法。 这里有两个例子: Web Caching with SqlCacheD
我一直在做一些研究,我可以看到这个系统的大部分管道,但是我不确定 sql server 如何知道当表中的数据更改时何时向任何监听器(应用程序)发送消息。我将首先解释我的理解,直到我迷路为止。 1)需要
我想将 SqlCacheDependency 添加到我的应用程序中。所以我决定创建littel tesp项目并遇到困难。我使用 MSSQL 2008。我用表行创建新的数据库并添加了几行。我执行了: A
它们之间的主要区别是什么以及何时应该使用它们?我最初的理解是 SqlCacheDependency 使用了轮询,但我读过它对于 ASP.NET 2.0 并没有太多。我想知道哪个最适合在 ASP.NET
SqlCacheDependency 是否适用于 Azure Blob 存储? 我有一个从存储中获取一些blob的操作(值大部分时间都是常量)。我尝试使用 OutputCache 来执行此操作。然后,
我正在使用以下代码来缓存,并依赖于“People”表的“Name”列的更改。但是,在一行中,如果其他列(例如“地址”列)发生更改,则依赖项也会触发并清除缓存。 (ASP.NET 4.0 与 SQL S
我有一种情况需要用一个新的系统替换当前基于文件的缓存依赖系统。我所关注的是转向使用 AppFabric 进行缓存。我想知道表通知应用程序数据更新的 SQLDependencyCaching 技术在 A
我正在尝试准备我的数据库以与 SQLCacheDependency 一起使用,并使用 aspnet_regsql 实用程序来设置 aspnet 更改通知表和适当的触发器。 当我运行以下命令时: asp
如果database.my webconfig文件中的表中的数据有代码,我想从缓存中获取数据; 它可以按我的意愿运行。但是如果我想缓存另一个表,我是否应该插入具有另
根据: http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx 如果我使用的是 sql 2
当 SQL Azure 不支持 SqlCacheDependency 时,如何实现 SQL 缓存依赖项。 最佳答案 MSDN 文章 Caching in ASP.NET with the SqlCac
我发现 SqlCacheDependency 在编写 C# ASP.NET 应用程序时非常有用,并且希望在我的 PHP 应用程序中使用类似的东西。有人可以提出建议吗? SqlCacheDependen
我不明白为什么我的 SqlCacheDependency 对象的 HasChanged 值最初从命令执行返回为 false,但在它从数据库,值更改为 true。 有时这发生在项目被插入缓存之前,导致缓
我是一名优秀的程序员,十分优秀!