在.Net Core(.Net5)中使用开源组件SqlTableDependency来监听ms sqlserver的数据库数据变化

server/2025/3/18 6:03:06/

文章目录

    • 1、本文主要说明在.Net Core(Demo为.Net5)中使用开源组件SqlTableDependency来监听ms sqlserver的数据库数据变化
    • 2、github地址:https://github.com/IsNemoEqualTrue/monitor-table-change-with-sqltabledependency
    • 3、安装nuget包:install-package SqlTableDependency
    • 4、准备数据库脚本
    • 5、相关代码(所有注释说明在代码中都有)
    • 6、运行结果日志

1、本文主要说明在.Net Core(Demo为.Net5)中使用开源组件SqlTableDependency来监听ms sqlserver的数据库数据变化

2、github地址:https://github.com/IsNemoEqualTrue/monitor-table-change-with-sqltabledependency

3、安装nuget包:install-package SqlTableDependency

4、准备数据库脚本


-- 新建表
create table UserInfoForTestSqlTableDependency(Id int not null primary key identity(1,1),Name varchar(50) not null,NickName varchar(50) not null,Sex int not null,Birthday datetime not null,Status int not null,CreateTime datetime not null,LastModifyTime datetime not null
)-- 插入数据:测试SqlTableDependency
insert into UserInfoForTestSqlTableDependency(Name,NickName,Sex,Birthday,Status,CreateTime,LastModifyTime)
values('用户-测试SqlTableDependency','昵称-测试SqlTableDependency',1,'1996-02-27',1,getdate(),getdate())-- 插入数据:测试SqlTableDependency
insert into UserInfoForTestSqlTableDependency(Name,NickName,Sex,Birthday,Status,CreateTime,LastModifyTime)
values('用户1-测试SqlTableDependency','昵称1-测试SqlTableDependency',2,'1995-11-21',1,getdate(),getdate())-- 更新单条数据:测试SqlTableDependency
update UserInfoForTestSqlTableDependency set
Name = '修改用户-测试SqlTableDependency',
NickName = '修改用户昵称-测试SqlTableDependency',
Status = 1, -- 该字段未变化,更新为原始值,测试是否会通知
LastModifyTime = getdate()
where Id = 1-- 更新多条数据:测试SqlTableDependency(会收到多条通知)
update UserInfoForTestSqlTableDependency set
LastModifyTime = getdate()-- 删除数据:测试SqlTableDependency
delete from UserInfoForTestSqlTableDependency where Id = 1-- 查询数据
select * from UserInfoForTestSqlTableDependency

5、相关代码(所有注释说明在代码中都有)


using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TableDependency.SqlClient;
using TableDependency.SqlClient.Base;
using TableDependency.SqlClient.Base.Enums;
using TableDependency.SqlClient.Base.EventArgs;
using TestMysqlConsole.Logs;
using TestMysqlConsole.TestLiteDB.Entitys;namespace TestMysqlConsole.TestLiteDB.Services
{/// <summary>/// 测试SqlTableDependency服务/// </summary>public class TestSqlTableDependencyService{/// <summary>/// 运行/// </summary>public static void Run(){/** 说明:* github地址:https://github.com/IsNemoEqualTrue/monitor-table-change-with-sqltabledependency* 安装nuget包:install-package SqlTableDependency** mssql数据库脚本脚本:* create table UserInfoForTestSqlTableDependency(*     Id int not null primary key identity(1,1),*     Name varchar(50) not null,*     NickName varchar(50) not null,*     Sex int not null,*     Birthday datetime not null,*     Status int not null,*     CreateTime datetime not null,*     LastModifyTime datetime not null* )** 【增】手动执行sql,插入数据,查看收到的通知事件数据和日志:* -- 插入数据:测试SqlTableDependency* insert into UserInfoForTestSqlTableDependency(Name,NickName,Sex,Birthday,Status,CreateTime,LastModifyTime)* values('用户-测试SqlTableDependency','昵称-测试SqlTableDependency',1,'1996-02-27',1,getdate(),getdate())** 【改】手动执行sql,修改数据,查看收到的通知事件数据和日志:* -- 更新数据:测试SqlTableDependency* update UserInfoForTestSqlTableDependency set* Name = '修改用户-测试SqlTableDependency',* NickName = '修改用户昵称-测试SqlTableDependency',* Status = 1, -- 该字段未变化,更新为原始值,测试是否会通知* LastModifyTime = getdate()* where Id = 1** 【改】手动执行sql,批量修改数据,查看收到的通知事件数据和日志(会受到两条通知):* -- 批量更新数据:测试SqlTableDependency* update UserInfoForTestSqlTableDependency set* LastModifyTime = getdate()** 【删】手动执行sql,删除数据,查看收到的通知事件数据和日志:* -- 删除数据:测试SqlTableDependency* delete from UserInfoForTestSqlTableDependency where Id = 1*///初始化var mapper = new ModelToTableMapper<UserEntityForTestLiteDB>();//映射mapper.AddMapping(r => r.Id, nameof(UserEntityForTestLiteDB.Id));mapper.AddMapping(r => r.Name, nameof(UserEntityForTestLiteDB.Name));mapper.AddMapping(r => r.NickName, nameof(UserEntityForTestLiteDB.NickName));mapper.AddMapping(r => r.Sex, nameof(UserEntityForTestLiteDB.Sex));mapper.AddMapping(r => r.Birthday, nameof(UserEntityForTestLiteDB.Birthday));mapper.AddMapping(r => r.Status, nameof(UserEntityForTestLiteDB.Status));mapper.AddMapping(r => r.CreateTime, nameof(UserEntityForTestLiteDB.CreateTime));mapper.AddMapping(r => r.LastModifyTime, nameof(UserEntityForTestLiteDB.LastModifyTime));//表名string tableName = "UserInfoForTestSqlTableDependency";using (var sqlTableDependency = new SqlTableDependency<UserEntityForTestLiteDB>(GetMsSqlConnectionString(), tableName, mapper: mapper)){//赋值sqlTableDependency.OnChanged += OnChanged;//开始sqlTableDependency.Start();//打印Console.WriteLine("已开始监控,输入任何字符以停止监控");//读取var line = Console.ReadLine();//停止sqlTableDependency.Stop();}}/// <summary>/// 测试SqlTableDependency - 接收数据库的变化通知/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public static void OnChanged(object sender, RecordChangedEventArgs<UserEntityForTestLiteDB> e){//logstring log = LingbugJsonHelper.ToJson(e, null);//记录日志LogService.InfoNoWrap(log);//打印Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")} 收到数据库通知:{log}");}/// <summary>/// 获取mssql数据库连接/// </summary>/// <returns></returns>public static string GetMsSqlConnectionString(){//获取mssql数据库连接return "server=.;database=xuyulin;uid=sa;pwd=你的数据库密码;";}}
}

6、运行结果日志


2025-03-17 18: 22: 22.329:{"Entity": {"Id": 1,"Name": "用户-测试SqlTableDependency","NickName": "昵称-测试SqlTableDependency","Sex": 1,"Birthday": "1996-02-27T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:22:22.127","LastModifyTime": "2025-03-17T18:22:22.127"},"EntityOldValues": null,"ChangeType": 2,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_d88ab812-40f3-418b-ba2e-70ff692283d5"
}
2025-03-17 18: 25: 30.617:{"Entity": {"Id": 1,"Name": "修改用户-测试SqlTableDependency","NickName": "修改用户昵称-测试SqlTableDependency","Sex": 1,"Birthday": "1996-02-27T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:22:22.127","LastModifyTime": "2025-03-17T18:25:30.547"},"EntityOldValues": null,"ChangeType": 3,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_d88ab812-40f3-418b-ba2e-70ff692283d5"
}
2025-03-17 18: 26: 57.932:{"Entity": {"Id": 1,"Name": "修改用户-测试SqlTableDependency","NickName": "修改用户昵称-测试SqlTableDependency","Sex": 1,"Birthday": "1996-02-27T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:22:22.127","LastModifyTime": "2025-03-17T18:25:30.547"},"EntityOldValues": null,"ChangeType": 1,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_d88ab812-40f3-418b-ba2e-70ff692283d5"
}
2025-03-17 18: 30: 36.704:{"Entity": {"Id": 2,"Name": "用户1-测试SqlTableDependency","NickName": "昵称1-测试SqlTableDependency","Sex": 2,"Birthday": "1995-11-21T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:30:36.463","LastModifyTime": "2025-03-17T18:30:36.463"},"EntityOldValues": null,"ChangeType": 2,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_dd0df3bf-4d65-42b1-affb-ff0eaa75b959"
}
2025-03-17 18: 31: 35.797:{"Entity": {"Id": 3,"Name": "用户-测试SqlTableDependency","NickName": "昵称-测试SqlTableDependency","Sex": 1,"Birthday": "1996-02-27T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:31:35.747","LastModifyTime": "2025-03-17T18:31:35.747"},"EntityOldValues": null,"ChangeType": 2,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_dd0df3bf-4d65-42b1-affb-ff0eaa75b959"
}
2025-03-17 18: 32: 33.257:{"Entity": {"Id": 2,"Name": "用户1-测试SqlTableDependency","NickName": "昵称1-测试SqlTableDependency","Sex": 2,"Birthday": "1995-11-21T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:30:36.463","LastModifyTime": "2025-03-17T18:32:33.25"},"EntityOldValues": null,"ChangeType": 3,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_dd0df3bf-4d65-42b1-affb-ff0eaa75b959"
}
2025-03-17 18: 32: 33.261:{"Entity": {"Id": 3,"Name": "用户-测试SqlTableDependency","NickName": "昵称-测试SqlTableDependency","Sex": 1,"Birthday": "1996-02-27T00:00:00","Status": 1,"CreateTime": "2025-03-17T18:31:35.747","LastModifyTime": "2025-03-17T18:32:33.25"},"EntityOldValues": null,"ChangeType": 3,"CultureInfo": "en-US","Server": ".","Database": "xuyulin","Sender": "dbo_UserInfoForTestSqlTableDependency_dd0df3bf-4d65-42b1-affb-ff0eaa75b959"
}

http://www.ppmy.cn/server/175881.html

相关文章

OpenWebUI:一站式 AI 应用构建平台体验

&#x1f680; 大家好&#xff0c;今天给大家分享一个超棒的 AI 应用构建工具——OpenWebUI&#xff01;体验下来&#xff0c;只能说丝滑&#xff01;必须强烈推荐&#xff01; &#x1f525; 听说过阿里巴巴的 Qwen 吗&#xff1f;他们最新的 Qwen Chat 网站就是用 OpenWebUI…

Python虚拟环境完全指南:用venv管理项目依赖,避免环境冲突的N个技巧

引言&#xff1a;当你的第3个Python项目开始报错时… “明明在Demo项目能跑的代码&#xff0c;移植到新项目就报错&#xff1f;” 你可能正经历着Python开发者的成年礼——依赖冲突。本文手把手教你用Python内置的venv模块打造隔离的虚拟环境&#xff0c;从此告别pip install引…

Java概述

硬件和软件 硬件&#xff08;Hardware&#xff09; 硬件指的是计算机系统中的物理装置&#xff0c;包括计算机本身及其所有可触及的部件软件是指计算机上运行的各种程序和相关的数据&#xff0c;它们使硬件能够完成各种任务。软件可以分为两大类&#xff1a; 计算机编程语言…

轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane

轻量级、高性能的 Rust HTTP 服务器库 —— Hyperlane 在当今的 web 开发领域&#xff0c;选择一个高效、可靠的服务器框架对于项目的成功至关重要。今天&#xff0c;我要向大家推荐一款优秀的 Rust HTTP 服务器库 —— Hyperlane。 一、卓越性能&#xff0c;数据说话 Hyper…

【儿童_认知地图的构建困境】

孩子成长过程中看似需要自由&#xff0c;实则对规则与界限有着深层的心理需求。当成人放弃管束责任时&#xff0c;表面是给予自由&#xff0c;实质是剥夺了儿童建立内在秩序的重要支持系统。这种现象背后隐藏着三个层面的心理机制&#xff1a; 一、认知地图的构建困境 儿童大…

汇编基础知识

CPU&#xff1a;一种可以执行机器指令进行运算的芯片&#xff08;微处理器&#xff09;。 存储器&#xff08;内存&#xff09;&#xff1a;存放CPU可以工作的指令和数据&#xff08;指令和数据都是二进制信息&#xff09;。 磁盘不同于内存&#xff0c;磁盘中的数据要读到内…

Servlet 点击计数器

Servlet 点击计数器 引言 随着互联网的快速发展&#xff0c;Web应用程序已成为人们日常生活中不可或缺的一部分。Servlet 作为Java平台上用于开发Web应用程序的重要技术之一&#xff0c;已经广泛应用于各种Web项目中。本文将详细介绍Servlet点击计数器的实现方法&#xff0c;…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…