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

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

时间:2024-12-02 14:54:50浏览次数:10  
标签:函数 C# SqlDependency SQL 应用程序 使用 数据库

‌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. 选择“文件”页,在所有者中设置正确的账号

标签:函数,C#,SqlDependency,SQL,应用程序,使用,数据库
From: https://www.cnblogs.com/panbin2006/p/18581882

相关文章

  • 信创过程中Oceanbase的一次优化记案例录
    某金融保险公司业务中这条sql在oracle中跑非常快,而在OB上跑需要25s,找我们这边看看是否还有优化空间,本人不才,懂一点点SQL优化的皮毛,做个简单的记录。--原慢sql如下:35sselectcount(1)from(selectcount(*)LISTNUMfromsx.t_AAAaLEFTJOIN(selectSTAFF_CODE,policy_id......
  • (系列十三)Vue3+Echarts搭建超好看的系统面板
    说明  该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。   该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。   说明:OverallAuth2.0是一个简单、易懂、功能强大的权限+可视化流程管理系统。友情提醒:本篇文章是属于系......
  • 【教程】LogicFlow流程图界的神器
    LogicFlow是由滴滴体验平台技术研发的一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制,方便我们快速在业务系统内满足类流程图的需求。目前,LogicFlow已经支持了客服业务下IVR、工单流转、智能机器人等多个运营系统,在各系......
  • element 的 Notification 通知,自定义内容
    https://blog.csdn.net/m0_70547044/article/details/134642743?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-134642743-blog-142925942.235%5Ev43%5Epc_blog_bottom_relevance_base4&......
  • Pycharm 2024.3 安装激活使用教程(至2099年)
    Pycharm简介Pycharm是一款非常强大的Python集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。要求在开始之前,请确保您的计算机满足以下系统要求:操作系统:Windows、macOS或Linux处理器:至少1GHz的处理器内存:至少2......
  • leetcode 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
    1461.检查一个字符串是否包含所有长度为K的二进制子串 法一:使用unordered_set,通过集合数量来判断classSolution{public:boolhasAllCodes(strings,intk){intsize=s.size();intk_2kFang=pow(2,k);if(size-k+1<k_2kFa......
  • 从挑战到突破:HBlock定义智算存储新范式!
    近日,由DOIT传媒主办,中国计算机学会信息存储专委会、武汉光电国家研究中心、百易存储研究院支持的2024中国数据与存储峰会在北京召开。此次峰会以“智数据AI未来”为主题,天翼云科技有限公司国际业务事业部存储产品线专家肖夏敏代表参会,并发表“轻量级存储集群控制器HBlock在智算时......
  • Leetcode:3195
    1,题目2,思路首先找到上下左右初始边就开始循环找到上下左右最终边,做面积运算就好了(其中+1是因为下标比实际位置少1)3,代码classSolution3195{publicintminimumArea(int[][]grid){intabove=0;//上intunder=0;//下intleft=0;//......
  • 星云erp-手机版-echart兼容小程序方案
    本文基于移动版 配套星云erp-手机版众多拿到源码的同学反映以下问题问题 首页的曲线图标在H5下可用,但发布为微信小程序后空白解决方法:步骤一:复现问题原来是小程序下通过$refs获取不了canvas组件对象。(经查阅资料后发现小程序下ref方式获取组件对象需要自定......
  • AutoDock Vina-分子对接
    开始也是什么不会,一点点的学还有记录目前电脑上安装了AutoDockVina(AutoDockVina(scripps.edu) 以及薛定谔,好像我们还买了discoverystudio(听说也可以分子对接,但是我一般拿这个软件来进行对接结果的分析,可以看到2D,3D的分析,还有一些其他的键显示等)目前用的最多的就是Vi......