如何向 OnChangeEventHandler 添加参数

How do I add a parameter to OnChangeEventHandler

我需要为插入数据库的不同 "symbol" 行设置不同的 SqlDependencies。

如何在 OnChangeEventHandler 设置中传递 Symbol?

public void SetDepedencyForSymbol(string symbol)
{
    string cmdText = "SELECT [Symbol] FROM [" + AccountCode + "].[FilledOrders] WHERE [Symbol] = '" + symbol + "'";
    using (SqlCommand command = new SqlCommand(cmdText, conn))
    {

        SqlDependency FilledDependency = new SqlDependency(command);
        FilledDependency.OnChange += new OnChangeEventHandler(OnDependencyForFillsChange);

        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}

void OnDependencyForFillsChange(object sender, SqlNotificationEventArgs e)
{
    // Handle the event (for example, invalidate this cache entry).

    // How can I get value of "symbol" here
}

您不能更改事件处理程序的签名。 SqlDependencyOnChange 事件的处理程序将始终接受 objectSqlNotificationEventArgs,您无法更改此设置。

您可以使用匿名委托来处理该事件。然后您将能够访问符号参数:

public void SetDepedencyForSymbol(string symbol)
{
    string cmdText = "SELECT [Symbol] FROM [" + AccountCode + "].[FilledOrders] WHERE [Symbol] = '" + symbol + "'";

    OnChangeEventHandler handler = (sender, args) =>
    {
        string theSymbol = symbol;
        // Handle the event (for example, invalidate this cache entry).

    };
    using (SqlCommand command = new SqlCommand(cmdText, conn))
    {

        SqlDependency FilledDependency = new SqlDependency(command);
        FilledDependency.OnChange += handler;

        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}