【发布时间】:2019-08-16 14:46:54
【问题描述】:
当新行被插入到具有特定列值的 MS SQL 时,我想接收“更改”事件。
下面是我目前使用的代码,效果相当不错,只是它会在 [Status] 列中的任何行值更改为/或从“NEW”时触发事件。
public void InitialiseDependencyWORK(Action onDependencyMethod)
{
this.onDependencyMethod = onDependencyMethod;
string sqlCommandText = "SELECT [Symbol] FROM [JJ].[Orders] WHERE [Status] = 'NEW'";
using (SqlCommand command = new SqlCommand(sqlCommandText, conn))
{
Dependency = new SqlDependency(command);
Dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
using (SqlDataReader reader = command.ExecuteReader())
{
// Process the DataReader.
}
}
}
void OnDependencyChange(object sender,
SqlNotificationEventArgs e)
{
// Handles NEW rows
}
我只对使用 [Status] = "NEW" 插入新行感兴趣,但是当没有新插入但 [Status] 从“NEW”更改为其他任何内容时也会触发此事件。
如何只在有新插入时才获得触发事件?
我希望在插入新闻行时收到触发事件,如下面的第 2 行:
OrderID, Status
1,Done
2,NEW
我不希望它触发,因为第 2 行的状态刚刚更新 - 实际上没有要处理的新行:
OrderID, Status
1,Done
2,Done
我怎样才能做到这一点?
【问题讨论】:
-
为什么要删除旧的Question 并复制它?这不会对您之前的问题添加任何内容。
-
问题重组以更好地解释我的问题
-
您可以使用
if(e.Info == "Insert")专门检查您的处理程序中的插入,忽略其他并重新订阅。 -
@DanGuzman 如果有大量更新和更改,e.Info 会返回什么?
标签: c# sql-server dependencies