Man*_*oon 6 c# sql-server dependencies
当新行已插入具有特定列值的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
}
Run Code Online (Sandbox Code Playgroud)
我只对通过[Status] =“ NEW”插入新行感兴趣,但是当没有新的插入但[Status]从“ NEW”更改为其他任何内容时,也会触发此事件。
当有新的插入时,如何仅获得触发事件?
当像下面的第2行一样插入新闻行时,我想收到一个触发事件:
OrderID, Status
1,Done
2,NEW
Run Code Online (Sandbox Code Playgroud)
我不希望它触发,因为第2行的状态刚刚更新-实际上没有新行要处理:
OrderID, Status
1,Done
2,Done
Run Code Online (Sandbox Code Playgroud)
我该如何实现?
小智 2
请问您为什么要在 C# 中重新发明 SQL 触发器以获取上下文? https://learn.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql?view=sql-server-2017
最简单的解决方案是在表本身捕获此信息,而不是通过会产生误报的查询。
或者,如果您通过存储库层运行所有代码,那么您应该能够区分插入和更新,并在那里将其取出。
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |