2017-06-16 3 views
0

Je dois configurer différentes SqlDependencies pour différentes lignes "symboliques" insérées dans la base de données.Comment ajouter un paramètre à OnChangeEventHandler

Comment puis-je passer Symbol dans la configuration OnChangeEventHandler?

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

Vous avez désespérément besoin de lire, comprendre et commencer à utiliser des requêtes paramétrées. Ce code est largement ouvert à l'injection sql. En ce qui concerne la question, je ne comprends pas ce que vous essayez de faire. Vous avez du code flottant dans l'espace mais le reste est dans une méthode. –

+0

@SeanLange J'ai édité la question pour la mettre dans une méthode. Je veux savoir quel "symbole" a été utilisé pour configurer la dépendance quand j'arrive à OnDependencyForFillsChange – ManInMoon

Répondre

1

Vous ne pouvez pas modifier la signature d'un gestionnaire d'événements. Un gestionnaire pour l'événement OnChange d'un SqlDependency acceptera toujours un object et un SqlNotificationEventArgs et vous ne pouvez pas modifier cela.

Vous pouvez toutefois utiliser un délégué anonyme pour gérer l'événement. Ensuite, vous serez en mesure d'accéder au paramètre de symbole:

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

C'est exactement ce que je voulais. – ManInMoon

+0

De rien mais n'oubliez pas de voter des réponses utiles si vous ne l'avez pas déjà fait :) https://stackoverflow.com/help/privileges/vote-up – mm8