2017-06-16 146 views
0

我需要爲插入數據庫的不同「符號」行設置不同的SqlDependencies。如何向OnChangeEventHandler添加參數

如何在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 
} 
+1

你非常需要閱讀,瞭解並開始使用參數化查詢。這段代碼對於sql注入是開放的。至於手頭的問題,我不明白你在做什麼。你有一些代碼只是漂浮在空間中,但其餘部分是在一個方法中。 –

+0

@SeanLange我編輯的問題放在方法中。我想知道哪些「符號」用於設置依賴項,當我到達OnDependencyForFillsChange – ManInMoon

回答

1

您不能更改事件處理程序的簽名。 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. 
     } 
    } 
} 
+0

這正是我想要的。 – ManInMoon

+0

不客氣,但請記住,如果您還沒有,請投票給有用的答案:) https://stackoverflow.com/help/privileges/vote-up – mm8