仅当新行已插入具有特定列值的MS SQL中时,才使C#依赖关系触发

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

最简单的解决方案是在表本身捕获此信息,而不是通过会产生误报的查询。

或者,如果您通过存储库层运行所有代码,那么您应该能够区分插入和更新,并在那里将其取出。