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
)
insert into UserInfoForTestSqlTableDependency(Name,NickName,Sex,Birthday,Status,CreateTime,LastModifyTime)
values('用户-测试SqlTableDependency','昵称-测试SqlTableDependency',1,'1996-02-27',1,getdate(),getdate())
insert into UserInfoForTestSqlTableDependency(Name,NickName,Sex,Birthday,Status,CreateTime,LastModifyTime)
values('用户1-测试SqlTableDependency','昵称1-测试SqlTableDependency',2,'1995-11-21',1,getdate(),getdate())
update UserInfoForTestSqlTableDependency set
Name = '修改用户-测试SqlTableDependency',
NickName = '修改用户昵称-测试SqlTableDependency',
Status = 1,
LastModifyTime = getdate()
where Id = 1
update UserInfoForTestSqlTableDependency set
LastModifyTime = getdate()
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
{
public class TestSqlTableDependencyService
{
public static void Run()
{
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();
}
}
public static void OnChanged(object sender, RecordChangedEventArgs<UserEntityForTestLiteDB> e)
{
string log = LingbugJsonHelper.ToJson(e, null);
LogService.InfoNoWrap(log);
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")} 收到数据库通知:{log}");
}
public static string GetMsSqlConnectionString()
{
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"
}