为什么我的SqlDependancy OnChange()事件不会触发?

时间:2018-04-04 12:07:07

标签: c# sql sql-server

我正在尝试实现一个SqlDependancy来在对MySQL服务器数据库中的一个表进行更改时触发事件,但是当我通过SSMS对表进行更改时,事件似乎没有触发,为什么这可能是?

下面我的建议是与微软tuturiol内联:

for i in range(len(data)):
    # do something
    current_row = data.iloc[i,:]
    row_minus1 = data.iloc[i-1,:]
    row_minus2 = data.iloc[i-2,:]
    row_minus3 = data.iloc[i-3,:]
    row_minus4 = data.iloc[i-4,:]

    if ((current_row['difference'] > 0) & (row_minus1['difference'] < 0)) & 
      (((row_minus1['tl'] > Upper) or (row_minus1['bl'] < Lower) )) or
      ((row_minus2['tl'] > Upper) or (row_minus2['bl'] < Lower) )) or 
      ((row_minus3['tl'] > Upper) or (row_minus3['bl'] < Lower) )) or
      ((row_minus4['top_line'] > Upper) or (row_minus4['bl'] < Lower) ))) :

我确定了以下内容:

  • 可以打开与数据库的连接。
  • 数据库已启用Service-Broker。
  • 已启动SqlDependancy。
  • 运行期间不会抛出任何异常

请注意,事件在订阅后不久就会触发,并且永远不会再次触发,以下是事件args的值: enter image description here

2 个答案:

答案 0 :(得分:1)

使用SqlDependency have a number of requirements进行查询。执行不符合这些要求的查询时,ChangeEventHandler会立即触发Invalid中的SqlNotificationEventArs.Info

在这种情况下,查询无效,因为表名不是模式限定的。指定一个由两部分组成的名称,以便查询对通知有效。此示例假定dbo架构:

string query = "SELECT AREA_ID, VEHICLE_COUNT, ADDED_ON FROM dbo.CAPACITY_LOG";

此更改应生成有效的SqlDependency。请注意,当调用ChangeEventHander时,正常模式是使用SqlDependency再次执行查询,这将获取最新数据并重新订阅更改通知。

答案 1 :(得分:0)

连接被丢弃,因此它停止接收来自数据库的输入。我在https://weblogs.asp.net/ricardoperes/broadcasting-database-changes-through-signalr处提供了可用的代码示例。