如何向 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
}
您不能更改事件处理程序的签名。 SqlDependency
的 OnChange
事件的处理程序将始终接受 object
和 SqlNotificationEventArgs
,您无法更改此设置。
您可以使用匿名委托来处理该事件。然后您将能够访问符号参数:
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.
}
}
}
我需要为插入数据库的不同 "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
}
您不能更改事件处理程序的签名。 SqlDependency
的 OnChange
事件的处理程序将始终接受 object
和 SqlNotificationEventArgs
,您无法更改此设置。
您可以使用匿名委托来处理该事件。然后您将能够访问符号参数:
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.
}
}
}