基于server broker 的数据实时更新
Service Broker介绍:SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持。这使开发人员可以轻松地创建使用数据库引擎组件在完全不同的数据库之间进行通信的复杂应用程序。开发人员可以使用 Service Broker 轻松生成可靠的分布式应用程序。使用 Service Broker 的应用程序开发人员无需编写复杂的内部通信和消息,即可跨多个数据库分发数据工作负荷。因为 Service Broker 会处理会话上下文中的通信路径,所以这就减少了开发和测试工作。同时还提高了性能。例如,支持网站的前端数据库可以记录信息并将进程密集型任务发送到后端数据库以进行排队。Service Broker 确保在事务上下文中管理所有任务以确保可靠性和技术一致性。
进行开发测试的一个简单的例子:
1. 创建数据库以及进行设置启用service broker 的脚本如下:
create database demoapp
ALTER DATABASE demoapp SET // 启用service broker
ENABLE_BROKER
GO
CREATE TABLE [dbo].[test](
[test] [varchar](50) NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[test] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
2. ADO.NET 的测试代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string con=@"Data Source=.\sqlexpress;Initial Catalog=demoapp;Integrated Security=True";
private void button1_Click(object sender, EventArgs e)
{
SqlDependency.Start(con);
updateData();
}
public void updateData()
{
string strSQL = "select test from dbo.test";
SqlDataAdapter da = new SqlDataAdapter(strSQL, con);
SqlDependency dependency = new SqlDependency(da.SelectCommand); /// 数据追踪的实时更新操作
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
DataTable dt = new DataTable();
da.Fill(dt);
if (dataGridView1.InvokeRequired)
{
dataGridView1.BeginInvoke(new ThreadStart(()=>this.dataGridView1.DataSource=dt));
}
else
{
dataGridView1.DataSource = dt;
}
}
public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
updateData();
}
}
以上为全部的客户端的代码:
3. 测试结果演示
开始数据
当进行数据操作的时候的数据
我执行的sql 命令
insert into test values(' demo first app');
insert into test values(' demo second app');
客户端的实时数据更新
4. 使用的场景
SqlDependency 被设计为用在 ASP.NET 或中间层服务中,这里对数据库有活动依赖项的服务器的数量相对较少。它不应用在客户端应用程序中,因为其中可能有成百上千个客户端计算机将为单个数据库服务器建立 SqlDependency 对象。
注意上面的使用场景是比较重要的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)