您的位置:首页 > 数据库

SqlServer通知与SqlDependency类使用示例

2009-04-10 14:59 375 查看
整个程序如下所示:感觉SqlDependcy有点怪,不是很清楚其设计原理。

class Program
{
private static SqlConnection con=null;
private static SqlCommand com=null;

static void Main(string[] args)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
SqlDependency.Start(constr);
con = new SqlConnection(constr);
com=new SqlCommand("select Uname from dbo.usertb", con);
OutputData();
Console.ReadLine();
SqlDependency.Stop(constr);
}

static void depend_OnChange(object sender, SqlNotificationEventArgs e)
{
OutputData();
}

private static void OutputData()
{
com.Notification = null;
SqlDependency depend = new SqlDependency(com);
depend.OnChange += new OnChangeEventHandler(depend_OnChange);
try
{
con.Open();
SqlDataReader dr = com.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read())
{
Console.WriteLine("{0}", dr[0]);
}
dr.Close();
Console.WriteLine();
}
finally
{
if (con.State != ConnectionState.Closed)
con.Close();
}
}
}
这里有几个关键点:

1. 启用broker并有相应的权限

2. 调用的顺序要注意。

3. 能够使用的SQL语句有一定限制,具体见参考手册

4. 在获取数据中,每次通知到来的时候都要再注册通知提示(就这点不清楚),不然在执行查询时会出现“查询通知订阅消息无效。”错误(不知识这错误是怎么来的,而且非调试状态下不同出现!(也就是说没反应 ~~):

SqlDependency depend = new SqlDependency(com);
depend.OnChange += new OnChangeEventHandler(depend_OnChange);

这两行代码要每次获取数据时调用!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: