sqldependency 的使用

一、sqldependency说明

sqlDependency 提供了一种能力:当监测的数据库中的数据发生改变的时候,sqldependency会自动触发onChange事件来通知应用程序,从而达到让系统自动更新数据(或者缓存的)的目的(后期会将其同signalr进行结合,以满足实时响应)

二、sqldependency方法调用(ASP.NET CORE 3.1)

  1. 首先,将数据库(这里使用的是SQLserver,MySql 好像叫做MySqlDependency 后期再补充)
ALTER DATABASE ShengNong SET NEW_BROKER WITH ROLLBACK IMMEDIATE;(恢复初始设置) 
ALTER DATABASE ShengNong SET ENABLE_BROKER;(设置通知服务)

SELECT is_broker_enabled FROM sys.databases WHERE name = 'ShengNong ’ (可以用来查看是否已经开启通知服务)

  1. 代码实现

在startup.cs中添加一个初始化服务 services.AddHostedService();
在TEST中 添加一个Task 异步任务
调用方法

using System.Data.SqlClient;

  public async Task WatchDevice()
            {
                await Task.Run(()=> {
                    useSqlDependency();
                });
            }

启用 SqlDependency.Start(conStr)来开启间监听

  public void useSqlDependency() {
                string conStr = AppSetting.DbConnectionString; // 在应用程序启动时运行的代码
                SqlDependency.Start(conStr);//启动监听服务,ps:只需启动一次
                _StockService.GetFourWayBusMessage();
            }

在服务关闭的时候要及时关闭监控

public Task StopAsync(CancellationToken cancellationToken)
        {
            string conStr = AppSetting.DbConnectionString; // 在应用程序启动时运行的代码
            SqlDependency.Stop(conStr);//启动监听服务,ps:只需启动一次
            return Task.CompletedTask;
        }

通过SQL语句进行监控
注意 :这里必须使用规范的SQL语句,而且查询的字段不可以用*代替。这个SQL的含义就是要监控该表的相应字段,当该字段发生改变的时候执行onchange,其余字段发生改变的时候不发生该改变

/// <summary>
        /// 实时监控库存日志变化
        /// </summary>
        /// <returns></returns>
        public DataTable GetFourWayBusMessage()
        {
            string strSQL = "select C_Code,C_IsHaveGoods,C_CurrentRow,C_CurrentLayer,C_CurrentColumn,C_TaskNum,C_Status from [dbo].[T_Device_FourWayBus] ";
            SqlDataAdapter da = new SqlDataAdapter(strSQL, AppSetting.DbConnectionString);
            SqlDependency dep = new SqlDependency(da.SelectCommand);
            dep.OnChange += new OnChangeEventHandler(dep_OnFourWayBusChange);
            DataTable tbl = new DataTable();
            da.Fill(tbl);
            return tbl;
        }
   private void dep_OnFourWayBusChange(object sender, SqlNotificationEventArgs e)
        {
            if (e.Type == SqlNotificationType.Change) //只有数据发生变化时,才重新获取并数据
            {
                var tbl = GetFourWayBusMessage();
            }
        }

这样一个简单的sqldependency使用就完成了

宝剑锋从磨砺出,梅花香自苦寒来。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值