基于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 对象。
注意上面的使用场景是比较重要的。