System.Data.SqlClient.SqlDependency类为我们提供了一个关于sql2005的很好的功能 ,虽然这个东西限制有很多很多,但还是有很实用价值的。
我们先看一个演示例子:
例子中先创建一个sql环境,里面插入了一些数据,然后用.net客户端查询,查询结果出来后再去更改数据库,增加一些记录,同时查看.net客户端的表格是否变化。

1、创建sql测试环境

SQL code
use master
gocreatedatabase dbTest
gouse dbTest
))

insertinto test(name)select'aa'insertinto test(name)select'bb'insertinto test(name)select'cc'insertinto test(name)select'dd'insertinto test(name)select'ee'goalterdatabase dbTest set enable_broker

2、在windows下用一个form和datagridview来测试

C# code
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsApplication10
{
publicpartialclass 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;

//出示化privatevoid 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();//获取数据 }

privatevoid 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,, "test");
dataGridView1.DataSource = ds.Tables["test"];
}

}

void sqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//因为是子线程,需要用invoke方法更新uiif (this.InvokeRequired)
{
this.Invoke(new OnChangeEventHandler(sqlDependency_OnChange), newobject[] { sender, e });
}
else
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= sqlDependency_OnChange;
//通知之后,当前dependency失效,需要重新getdata并且设置通知 GetData();
}
}

privatevoid Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//清理现场 SqlDependency.Stop(connString);
conn.Close();
conn.Dispose();
}
}
}

3、启动.net程序,表格中会有3条记录,然后切换到数据库中,继续插入一些数据

SQL code
insertinto test(name)select'ff'insertinto test(name)select'gg'

4、切换回.net客户端,看看表格是否改变

关于SqlDependency类,很多人无法测试成功,因为它的限制很多,功能可能有待加强,稍微不注意就会让上面的代码陷入死循环。特别要注意的就是command的sql语句问题:

select id,name from dbo.test where id <>4 order by id desc

很遗憾,他只能支持上面这样的简单语句

明必须写,不能用*,不能用top,不能用函数,包括聚合函数,不能用子查询,包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变
量,不能用视图,不能垮库,而且表名之前必须加类似dbo这样的前缀....具体有多少限制,基本上除了上述的格式或者比上述更简单的格式,其他的都不可
以。

最新文章

  1. PX 和PT的区别
  2. hadoop(2014/0619)
  3. JDBC的应用实例
  4. 1 UML基础
  5. 关于web-dev-server 记录
  6. case语法练习脚本之判断
  7. ab压测参数说明
  8. 使用iOS手势UIGestureRecognizer
  9. 理解Python的*args, **kwargs
  10. c31 rotc_百度百科
  11. JavaScript match()方法和正则表达式match()
  12. centos7安装node
  13. Python开发——数据类型【运算符】
  14. JavaScript大杂烩8 - 理解文本解析的&quot;黄金搭档&quot;
  15. luogu P3674 小清新人渣的本愿
  16. 偷懒啦!button多了,这样写既简洁又高效
  17. laravel 5.5 《电商实战 》辅助函数
  18. CXF实战之拦截器Interceptor(四)
  19. win10 问题:你没有权限在此位置中保存文件。请与管理员联系以获得相应权限。
  20. python 中 使用sys模块 获取运行脚本时在命令行输入的参数

热门文章

  1. local_response_normalization 和 batch_normalization
  2. 浅谈自学Python之路(day1)
  3. Jenkins上Git ssh登陆配置
  4. SQLServer2008 关于Group by
  5. CSS3之 transform和animation区别
  6. jquery学习之$(document).ready()
  7. AO如何获取SDE数据库中的数据
  8. MAVEN - 生命周期(1)
  9. IT狂人职场路:揭秘华为百度高管如何炼成?
  10. 读书笔记「Python编程:从入门到实践」_7.用户输入和while循环