2016-04-05 2 views
0
public void SendNotification() 
{ 
    string message = ""; 
    string constr = "xxxxxxxxxxxxx"; 
    using (SqlConnection connection = new SqlConnection(constr)) 
    { 
     string query = "XXXXXXXXXX"; 
     using (SqlCommand command = new SqlCommand(query, connection)) 
     { 
      command.Notification = null; 
      SqlDependency dependency = new SqlDependency(command); 
      dependency.OnChange += new OnChangeEventHandler(dependency_Onchange); 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       message = message + "<br>" + reader.GetSqlValue(0); 
       notifications_count = notifications_count + 1; 
       _IsUnread = 1; 
      } 
     } 
    } 
} 

private void dependency_Onchange(object sender, SqlNotificationEventArgs e) 
{ 
    if (e.Type == SqlNotificationType.Change) 
    { 
    SendNotification(); 
    } 

} 

so dass der obige Code funktioniert prima (jedes Mal, Brennen), wenn if (e.Type == SqlNotificationType.Change) verwenden, aber das ist das Problem, wenn ich die if (e.Info.ToString() == "Insert") bin mit innen dependency_OnChange wiedependency_OnChange Verfahren Brennen nur einmal, wenn sqlnotificationargs.info statt sqlnotificationargs.type

private void dependency_Onchange(object sender, SqlNotificationEventArgs e) 
{ 
    if (e.Type == SqlNotificationType.Change) 
    { 
     if (e.Info.ToString() == "Insert") 
     { 
      SendNotification(); 
     } 
    } 

} 

wird die Methode nur einmal ausgelöst.

Antwort

-1

Hey ich weiß, es könnte ein bisschen zu spät sein, hatte ich ein ähnliches Problem und es ist sehr einfach

Sie müssen verwenden Syntax wie [dbo] .TableName where = vlaue nicht nur Tabellennamen und keine Operatoren wie "in" oder * für SQL-Anweisung.

versuchen, diese ... Ich weiß, sie albert, aber ich hatte genau das gleiche Problem mit ähnlichem Code

e.info.ToString().Trim().ToLower() == "insert" 

oder einfacher

e.info.ToString().Contains("Insert") 

Wenn das nicht der Fall ist

Dann könnten Sie Schleifenfunktionen haben, da Sie in der SQL-Abhängigkeit, wenn Sie versuchen, Benachrichtigungen an bestimmte Clients zu senden, auf ein Problem stoßen o f Aufteilen der Benachrichtigung auswählen, aktualisieren oder einfügen. Um zu sehen, ob alles gut funktioniert und etwas anderes Probleme aufgrund von Überlappungen verursacht, fügen Sie eine statische Liste hinzu und fügen Sie den Leserwert hinzu, um mögliche Überschneidungen zu erkennen.