sqlDependency的onChange事件触发时,总是提示通知事件原因为Invalid

kingkwang 2009-02-01 02:49:02
private void Form1_Load(object sender, EventArgs e)//初始化sqlDependency,开始监听
{
dep.OnChange += new OnChangeEventHandler(dep_OnChange);
SqlDependency.Start(conn.ConnectionString);
ListStudent();
}

private void dep_OnChange(object sender, SqlNotificationEventArgs e)
//监听方法,每一次启动时总是提示e.Info为Invalid.(无法通知)
e也就是SqlNotificationInfo

{
DialogResult dR;
dR = MessageBox.Show("The data has changed. Refresh?",e.Info.ToString(),MessageBoxButtons.YesNo,MessageBoxIcon.Question);
if (dR == DialogResult.Yes)
{
this.Invoke(new PopulateList(ListStudent));
}
}

private void ListStudent()//读取数据
{
productListBox.Items.Clear();
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
productListBox.Items.Add(reader["name"].ToString() + ":" + reader["sex"].ToString());
}
conn.Close();
}


是否是要在sqlserver中启用相应的sql语句,才支持sqlDependenCy类?
...全文
419 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
周公 2009-02-01
  • 打赏
  • 举报
回复
查询通知只支持某些 Transact-SQL 语句。

首先,要支持通知,查询中不得包含下列内容:

派生的表。

行集函数。

UNION 运算符。

子查询。

外联接或自联接。

TOP 子句。

DISTINCT 关键字。

COUNT(*) 聚合函数。

AVG、MAX、MIN、STDEV、STDEVP、VAR 或 VARP 聚合函数。

用户定义的聚合函数。

引用可空表达式的 SUM 函数。

完全文本谓词 CONTAINS 或 FREETEXT。

COMPUTE 或 COMPUTE BY 子句。

聚合表达式(如果在选择列表中未指定 GROUP BY)。如果指定了 GROUP BY,选择列表中必须包含 COUNT_BIG(*) 表达式,并且不能指定 HAVING、CUBE 或 ROLLUP。

INTO 子句。

将阻止结果更改的条件(例如 WHERE 1=0)。

FOR BROWSE(或在 SET NO_BROWSETABLE ON 的情况下运行)。

READPAST 锁定提示。

其次,查询不得引用下列内容:

临时表或表变量。

其他数据库或服务器中的表或视图。

所有其他视图或表值函数。

任何系统表或视图。

任何非确定性函数,包括评级和窗口函数。

任何服务器全局变量

任何服务中介程序队列。
周公 2009-02-01
  • 打赏
  • 举报
回复
查询通知是 Microsoft SQL Server 2005 中以及 ADO.NET 2.0 的 System.Data.SqlClient 命名空间中提供的一项新功能。查询通知建立在 SQL Server 2005 中引入的服务中介程序基础结构的基础上,使应用程序在数据更改时可以接收通知。如果应用程序提供数据库中信息的缓存(例如 Web 应用程序),需要在源数据更改时接收通知,此功能特别有用。

通过三种方式可以使用 ADO.NET 实现查询通知:

低级实现通过 SqlNotificationRequest 类提供,该类公开服务器端功能,使您可以利用通知请求执行命令。

高级实现通过 SqlDependency 类提供,该类提供在源应用程序和 SQL Server 之间的通知功能的高级抽象,使您可以使用相关性来检测服务器中的更改。大多数情况下,这是托管客户端应用程序通过 SQL Server .NET Framework 数据提供程序利用 SQL Server 2005 通知功能的最简单、最有效的方式。

此外,使用 ASP.NET 2.0 构建的 Web 应用程序可以使用 SqlCacheDependency 帮助器类。

如果应用程序需要通过刷新显示或缓存(例如在 DataGrid 控件或网页中)来响应基础数据中的更改,查询通知非常有用。Microsoft SQL Server 2005 允许 .NET Framework 应用程序向 SQL Server 发送命令,如果执行相同命令生成的结果集与最初检索到的结果集不同,请求生成通知。
周公 2009-02-01
  • 打赏
  • 举报
回复
OnChange 在关联命令的结果更改时发生。如果您没有使用 OnChange,可检查 HasChanges 属性以确定查询结果是否已更改。
OnChange 事件不一定意味着数据发生了更改。在其他情况下,如超时时间已过和设置通知请求失败,也会生成 OnChange
leonwan 2009-02-01
  • 打赏
  • 举报
回复
up
sxmonsy 2009-02-01
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Xrinehart/archive/2006/07/27/461106.html
你看看这个对你有帮助吗?
yeah920 2009-02-01
  • 打赏
  • 举报
回复
不会,帮顶.

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧