C# 启用数据库通知刷新(SqlDependency)

news/2024/12/2 14:55:42/文章来源:https://www.cnblogs.com/panbin2006/p/18581882

‌SqlDependency‌ 是一种功能,用于在数据库中的数据发生变化时自动触发事件,通知应用程序更新数据或缓存。它适用于ASP.NET和ASP.NET Core应用程序,特别是在需要实时响应数据变化的场景中非常有用。

使用方法

1‌.启用数据库的通知服务‌:

首先需要在数据库中启用通知服务。对于SQL Server,可以使用以下SQL命令:

ALTER DATABASE <数据库名> SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE <数据库名> SET ENABLE_BROKER;

可以通过查询sys.databases来确认数据库是否已经开启了通知服务:

SELECT is_broker_enabled FROM sys.databases WHERE name = '<数据库名>';

2.在应用程序中启用SqlDependency‌:

在应用程序启动时,使用SqlDependency.Start(connectionString)来启动监听服务。例如:

string connectionString = AppSetting.DbConnectionString;
SqlDependency.Start(connectionString);

3.‌订阅OnChange事件‌:

在查询时,需要明确指定列名,不能使用*通配符,也不能使用子查询、联接等复杂查询。例如:

using (SqlCommand cmd = new SqlCommand("SELECT column1, column2 FROM table_name", connection))
{SqlDataReader reader = cmd.ExecuteReader();SqlDependency dependency = new SqlDependency(cmd);dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);// 处理数据变化事件
}

限制和注意事项

‌* 查询语法限制‌:SELECT语句中的投影列必须明确声明,不能使用或表名.的方式,不能引用视图、计算列、派生表、临时表或表变量等。
‌‌* 聚合函数‌:不能使用AVG、COUNT()、MAX、MIN、STDEV、STDEVP等聚合函数。如果需要使用聚合函数,可以使用GROUP BY表达式,并且选择列表中可以包含COUNT_BIG()或SUM()。
‌‌
运算符和函数‌:不能使用PIVOT、UNPIVOT、UNION、INTERSECT、EXCEPT等运算符和函数。
‌‌* 大型对象类型‌:不能引用大型对象类型如text、ntext和image。
‌‌* 全文谓词‌:不能使用CONTAINS或FREETEXT全文谓词。
‌‌* 行集函数‌:不能使用OPENROWSET和OPENQUERY等行集函数。

数据库监听异常

  1. 启动应用程序,第一次打开时,通过 SQL Profiler 可以监视到向数据库发出的 SQL 命令。
  2. 第二次打开页面时,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令,此时数据从缓存中读出。
  3. 修改数据库对应表中的数据。
  4. 第三次打开页面时,数据仍是第一次打开时的数据,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令。

解决方法

  1. 打开 Microsoft SQL Server Management Studio。
  2. 右击数据库节点,选择“属性”。
  3. 选择“文件”页,在所有者中设置正确的账号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845443.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git报错403怎么解决

Git报错403及解决询问AI主要有以下可能原因:创建SSH:(不要用中文,管理员权限打开PowerShell运行下面的命令,地址可以自定义)ssh-keygen -t rsa -b 4096 -C "2919356315@qq.com" -f "C:/Users/lzh/.ssh/id_rsa"查看SSH:cat C:/Users/lzh/.ssh/id_rsa.p…

fetch call web api upload or update picture

昨天C# + html + fetch + API + javascript https://www.cnblogs.com/insus/p/18579193 其中有一个图片相关的功能,现把它解说一下。html页面上,简单的input和button,无需何附加<form action="/action_page_binary.asp" method="post" enctype="…

长期主义下的一本经济账:卷价格更要卷性能

「 不做陪跑者,要做支撑者。企业成长的每个关键时刻,在背后默默发力。」今年以来,云的价格战似乎更猛烈了一些。 事实上,云服务降价在规模与创新两重推动力下早就是一种常态。作为云的鼻祖,亚马逊云经常是一年连续降价十几次甚至几十次。这种理性降价,是将规模红利与创新…

“天翼云息壤杯”高校AI大赛福建赛区启动!

11月20日,2024首届全国“天翼云息壤杯”高校AI 大赛(福建赛区)正式启动。中国电信福建公司携手华为公司、福建省计算机学会、福建省自动化学会,正式启动天翼云科技有限公司承办的“天翼云息壤杯”高校AI大赛(福建赛区)赛事。该赛事是中国电信搭建的进一步挖掘培养AI人才、…

从挑战到突破:HBlock定义智算存储新范式!

近日,由DOIT传媒主办,中国计算机学会信息存储专委会、武汉光电国家研究中心、百易存储研究院支持的2024中国数据与存储峰会在北京召开。此次峰会以“智数据 AI未来”为主题,天翼云科技有限公司国际业务事业部存储产品线专家肖夏敏代表参会,并发表“轻量级存储集群控制器HBl…

html2canvas 解决某些站点截图空白问题

业务场景介绍 点击浏览器右上角已安装的chrome插件图标,这个时候会出现一个界面,我们称这个界面为popup,界面上有个"从页面获取产品信息"按钮,单机它会对当前标签页面内容进行截图,最后将截图的图片转成base64发送至xx接口 部分核心代码解读:截取当前可视区域的…

领歌看板助力电商大促筹备

每年的“双11”“双12”“618”等大型电商促销活动是各企业的年度重头戏,但涉及环节众多、协作复杂,稍有疏漏就可能影响活动效果。领歌看板为您提供了一种高效、直观的任务管理方式,确保每一步都尽在掌握。 1. 全面覆盖任务场景,理清活动脉络 利用领歌看板,您可以将大促活…

.NET开发WinForm(C/S)项目整合三种SOA服务访问(直连、WCF、WebAPI)模式

在软件开发领域,尤其是企业级应用开发中,灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目,如何高效地与后端数据库进行交互,以及如何提供多样化的服务访问方式,是开发者需要深入考虑的问题。目前主流的方式就三种:数据库直连、WCF模式、WebAPI模式。RDIF…

mysql 之查询条件!=或者存在问题,会被轻易忽略而且影响查询结果

mysql数据库查询,我们再使用sql条件时会经常使用!=(<>),但使用!=之后,这个字段对应的为空的值不会查出来。所以建议!=长春与is null同时用 查询结果测试如下: 我们先查询满足条件的数据;id上下相同,同时此id的对应的paln_status查询如图是空的: 咱们再来查询总…

Postman 安装与汉化超详细步骤全解析教程

下载安装包 首先,我们需要获取 Postman 的安装包。为了方便,链接提供了安装包跟汉化包 点击获取postman安装及汉化包 为什么要提供安装包跟汉化包? 汉化包和postman的版本必须是一致的,如果不一致就会出现汉化后无法打开postman的问题; 注意:如果想要汉化的就不能使用最新…

文档比对新玩法:从文本细节到逻辑洞察

在学术研究和项目管理中,文档的版本对比和差异检查往往是个被低估却至关重要的环节。尤其是在跨学科合作或大型团队中,不同版本的文档往往在细节上存在微妙变化,而这些变化可能直接影响研究结论、策略决策甚至是整个项目的方向。 传统的文档对比工具往往局限于纯文本比对,这…

有效管理win11系统开机启动项

平时如果有你不想随着系统开机就启动的软件,可以通过下面的方式进行设置。个人推荐使用这个办法 1.首先点击开始菜单2.点击“设置”3.再点击左边栏“应用”选项4.然后点击其中的“启动”设置5.选择开关按钮,即可设置启动或禁用