用SqlDependency类为SQL2005查询提供更改通知
2010-10-01 10:17:50 来源:WEB开发网System.Data.SqlClient.SqlDependency类为我们提供了一个关于sql2005的很好的功能 ,就是sql2000时代很多人梦寐以求的查询自动通知。虽然这个东西限制有很多很多,但还是有很实用价值的。
我们先看一个演示例子:
例子中先创建一个sql环境,里面插入了一些数据,然后用.net客户端查询,查询结果出来后再去更改数据库,增加一些记录,同时查看.net客户端的表格是否变化。
1、创建sql测试环境
use master
2、在windows下用一个form和datagridview来测试
go
create database dbTest
go
use dbTest
go
create table test(id int identity(1,1),name varchar(10))
insert into test(name)select 'aa'
insert into test(name)select 'bb'
insert into test(name)select 'cc'
insert into test(name)select 'dd'
insert into test(name)select 'ee'
go
alter database dbTest set enable_broker
using System;
3、启动.net程序,表格中会有3条记录,然后切换到数据库中,继续插入一些数据
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication10
{
public partial class Form1 : Form
{
//拖一个DataGridView到Form中
public Form1()
{
InitializeComponent();
}
//变量
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=dbTest";
System.Data.SqlClient.SqlConnection conn = null;
System.Data.SqlClient.SqlCommand command = null;
//出示化
private void Form1_Load(object sender, EventArgs e)
{
conn = new System.Data.SqlClient.SqlConnection(connString);
command = conn.CreateCommand();
command.CommandText = "select id,name from dbo.test where id<>4 order by id desc ";
SqlDependency.Start(connString);//启动
GetData();//获取数据
}
private void GetData()
{
command.Notification = null;//清除
SqlDependency dependency = new SqlDependency(command);//设置通知
dependency.OnChange += new OnChangeEventHandler(sqlDependency_OnChange);//通知事件
using (SqlDataAdapter adapter =new SqlDataAdapter(command)) //查询数据
{
System.Data.DataSet ds = new DataSet();
adapter.Fill(ds,0,3, "test");
dataGridView1.DataSource = ds.Tables["test"];
}
}
void sqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//因为是子线程,需要用invoke方法更新ui
if (this.InvokeRequired)
{
this.Invoke(new OnChangeEventHandler(sqlDependency_OnChange), new object[] { sender, e });
}
else
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= sqlDependency_OnChange;
//通知之后,当前dependency失效,需要重新getdata并且设置通知
GetData();
}
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//清理现场
SqlDependency.Stop(connString);
conn.Close();
conn.Dispose();
}
}
}
Tags:SqlDependency SQL 查询
编辑录入:爽爽 [复制链接] [打 印]- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
赞助商链接