Csharp/C#教程:如何使用SqlCacheDependency?分享


如何使用SqlCacheDependency?

我需要为依赖于此查询的表实现SqlCacheDependency: SELECT Nickname FROM dbo.[User]

我为此创建了一个方法:

 private IEnumerable GetNicknamesFromCache() { const String cacheValueName = "Nicknames"; var result = HttpRuntime.Cache.Get(cacheValueName) as List; if (result == null) { result = _repository.GetAllNicknames(); var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString; var sqlConnection = new SqlConnection(connectionString); var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection); var sqlDependency = new SqlCacheDependency(sqlCommand); HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency); } return result; } 

但是,当我运行我的应用程序时,它不起作用。 我查看了订阅者列表( sys.dm_qn_subscriptions表)并且没有记录。

我调查了很多时间,并且已经尝试了各种解决方案,但它们对我不起作用:

但它没有帮助。 它仍然无法正常工作。

我如何使其工作?

我已经找到了解决方案。

首先检查是否为您的表启用了Service Broker,并在需要时启用它:

 SELECT name, is_broker_enabled FROM sys.databases WHERE name = '' ALTER DATABASE  SET enable_broker WITH ROLLBACK IMMEDIATE 

接下来在SQL Server中创建新角色sql_dependency_rolesql_dependency_role授予权限并向用户授予角色:

 EXEC sp_addrole 'sql_dependency_role' GRANT CREATE PROCEDURE to sql_dependency_role GRANT CREATE QUEUE to sql_dependency_role GRANT CREATE SERVICE to sql_dependency_role GRANT REFERENCES on CONTRACT::[https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_role GRANT VIEW DEFINITION TO sql_dependency_role GRANT SELECT to sql_dependency_role GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_role GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_role EXEC sp_addrolemember 'sql_dependency_role', '' 

之后添加C#代码以使用SqlCacheDependencySqlDependency (大多数方式相同)。

我已经改变了我的方法,现在它看起来像这样:

 private IEnumerable GetNicknamesFromCache() { const String cacheValueName = "Nicknames"; var result = HttpRuntime.Cache.Get(cacheValueName) as List; if (result == null) { result = _repository.GetAllNicknames(); using (var connection = new SqlConnection(_config.ConnectionString)) { connection.Open(); SqlDependency.Start(_config.ConnectionString); var command = new SqlCommand("SELECT Nickname FROM dbo.[User]", connection); var dependency = new SqlCacheDependency(command); HttpRuntime.Cache.Insert(cacheValueName, result, dependency); command.ExecuteNonQuery(); } } return result; } 

现在它工作正常。

不要忘记在创建SqlCacheDependencySqlDependency之前调用SqlDependency.Start方法并在最后执行命令。

上述就是C#学习教程:如何使用SqlCacheDependency?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1039114.html

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐