2016-07-12 5 views
0

Ich habe ein einfaches Programm auf etwa 200 Maschinen, die protokolliert, welche Form der Benutzer öffnet. Jedes Mal, wenn ein Formular geöffnet wird, wird eine SQL-Verbindung geöffnet, eine Zeile wird eingefügt und ich schätze, die Verbindung ist geschlossen. Ich habe gelesen, Connection Pooling ist standardmäßig aktiviert, also denke ich, es schließt es nicht wirklich? Ich bin nicht berechtigt, einen Web-Service oder einen potenziellen besseren Weg zu nennen, so ist meine Frage, warum dieser Fehler und gibt es und die Idee, wie es zu beheben? Oder etwas auf dem SQL-Ende? Vielleicht kann ich eine Einstellung ändern?Warum der SQL Server-Fehler, wenn viele Clients versuchen, in eine Tabelle zu schreiben?

using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      try 
      { 
       connection.Open(); 

       using (SqlCommand command = new SqlCommand(
       "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection)) 
       { 
        command.Parameters.Add(new SqlParameter("Session", llf.SesssionId)); 
        command.Parameters.Add(new SqlParameter("Form", llf.Form)); 
        command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp)); 
        command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber)); 

        command.ExecuteNonQuery(); 
       } 


      } 
      catch (Exception ex) 
      { 
       AppInsightHelper.TrackException(ex); 
      } 
     } 

Eine netzwerkbezogene oder instanzspezifischen Fehler beim Herstellen einer Verbindung zu SQL Server. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server so konfiguriert ist, dass Remoteverbindungen zugelassen werden. (Anbieter: TCP Provider, Fehler: 0 - Der angeforderte Name ist gültig, aber keine Daten des angeforderten Typs gefunden.) Der angeforderte Name ist gültig, aber es wurden keine Daten des angeforderten Typs gefunden

Der Fehler scheint zu passieren mehr während der Hauptverkehrszeiten, also denke ich, dass es nicht genug offene Verbindungen oder etwas zum SQL-Server gibt?

+2

Sie sind Verbindungen Eigenschaft in dem App Code - der 'using' Block wird die Verbindung schließen, wenn es fertig ist. Ich vermute, dass etwas auf der Seite _server_ geändert werden muss, um [mehr gleichzeitige Verbindungen zuzulassen] (http://stackoverflow.com/questions/1499718) oder ein anderes Nebenläufigkeitsmodell zu verwenden. Sie haben möglicherweise auch tiefere Netzwerkprobleme, aber mit nur 200 Benutzern scheint es unwahrscheinlich, es sei denn, Sie haben wirklich günstige Switches oder Router. –

+1

Wenn Sie googlen - Ein Netzwerk-bezogenen oder instanzspezifischen Fehler beim Herstellen einer Verbindung zu SQL Server intermittierend aufgetreten - Sie sehen andere Q's, wo Menschen dieses Problem haben, haben viele Leute erwähnt Netzwerk überlastet, Firewall usw. – Cato

+1

Ich könnte mir vorstellen Es ist Netzwerk statt SQL-Server, wenn Sie keine Verbindungen mehr hatten, erhielten Sie eine Nachricht, dass es normalerweise keine Verbindungen mehr gab - ich nehme an, dass es intermittierend ist - wenn Sie 100ms nach einem Fehler schlafen, dann führen Sie einen automatischen Wiederholungsversuch durch für eine begrenzte Anzahl von Zeiten - würde helfen – Cato

Antwort

2

wie etwa ein Wiederholungs

 const int max_try = 5; 

     int i = max_try; 

     while (i-- > 0) 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       try 
       { 
        connection.Open(); 

        using (SqlCommand command = new SqlCommand(
        "INSERT INTO LoggerLoanForm VALUES(@Session, @Form, @DateStamp, @LoanNumber)", connection)) 
        { 
         command.Parameters.Add(new SqlParameter("Session", llf.SesssionId)); 
         command.Parameters.Add(new SqlParameter("Form", llf.Form)); 
         command.Parameters.Add(new SqlParameter("DateStamp", llf.DateStamp)); 
         command.Parameters.Add(new SqlParameter("LoanNumber", llf.LoanNumber)); 

         command.ExecuteNonQuery(); 
         i = 0; 
        } 


       } 
       catch (Exception ex) 
       { 
        if (i == 0) 
          AppInsightHelper.TrackException(ex); 
         System.Threading.Thread.Sleep(50); 

       } 
      } 
     } 
+0

das ist eine gute Idee .. Ill versuchen Sie dies .. Wenn das Problem Stau ist dann sollten 5 Wiederholungen genug sein, um durchzukommen .. Ich kann das Ausnahmeprotokoll überprüfen und herausfinden – punkouter

Verwandte Themen