2016-04-24 15 views
0

I-Anschluss ist mit dem Code verfügbar überprüfen:Wie kann man die Wartezeit für eine offene Verbindung verkürzen?

SqlConnection objConnection = new SqlConnection(string.Concat(connectionString)); 
     try 
     { 
      objConnection.Open(); // this line make wait time if connection not available 
      objConnection.Close(); 
      SqlConnection.ClearAllPools(); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 

Wenn die Verbindung nicht verfügbar ist, es eine lange Zeit, sie zu beantworten nimmt reduzieren .wie kann?

+0

Wenn Sie eine Verbindung über das TCP-Protokoll herstellen, können Sie versuchen, ob der Server so konfiguriert ist, dass er auf einen einfachen Ping antwortet und diesen stattdessen verwendet, bevor Sie eine echte TCP-Verbindung initiieren. Ich nehme an, dass Ihr Client eine Netzwerkverbindung hat. – rene

+0

Ich habe keinen Zugriff auf den Konfigurationsserver. – shahroz

Antwort

1

Wenn Sie Ihren SQL Server sich verbinden Sie zuerst Ping den Server versuchen. Auf meiner Box dauert ein Ping nur 5 Sekunden, um zu dem Schluss zu kommen, dass ein Server nicht erreichbar ist. Der einfachste Code, der diese Funktion nutzt in diesem Snippet gezeigt:

if(new System.Net.NetworkInformation.Ping().Send("Your servername here").Status != 
     System.Net.NetworkInformation.IPStatus.TimedOut) 
{ 
    // server reachable, try a real SQL Server connection now 
    SqlConnection objConnection = new SqlConnection(connectionstring); 
    try 
    { 
     objConnection.Open(); // this line make wait time if connection not available 
     objConnection.Close(); 
     // not sure why you would want this 
     // only use if you want worse performance 
     // SqlConnection.ClearAllPools(); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
else 
{ 
    return false; // PING failed 
} 

Systemadministratoren kann deaktivieren/Block ICMP-Verkehr so ​​dass diese Option nicht für jeden Server funktionieren könnte.

1

können Sie prüfen, SQL-Verbindung auf diese Weise, wird dies nicht lange dauern

 SqlConnection objConnection = new SqlConnection(string.Concat(connectionString)); 
     try 
     { 
      objConnection.Open(); 
     } 
     catch {} 

     if (objConnection != null && objConnection.State == ConnectionState.Open) 
     { 
      try 
      { 
       objConnection.Close(); 
      } 
      catch {} 
      return true; 
     } 
     else if (objConnection != null && objConnection.State == ConnectionState.Closed) 
     { 
      try 
      { 
       objConnection.Close(); 
      } 
      catch {} 
      return false; 
     } 
+0

objConnection.State ist in der Nähe, weil ich es nicht öffne !!! – shahroz

+0

ohne zu öffnen, haben Sie keine Wahl zu überprüfen, und wenn Sie versuchen, es zu öffnen und scheitern dann wird es definitiv Zeit brauchen, weil es versuchen wird, erneut zu verbinden dann melden Sie, dass es – Mostafiz

+0

nicht öffnen kann, wie diese Zeit reduzieren kann (es wird versuchen zum Wiederverbinden)? Ist es möglich? – shahroz

1

Nicht ClearAllPools! Der Verbindungspool dient speziell dazu, die Verbindung effizienter zu gestalten. Wenn du Open() hast, wird eine Verbindung vom Pool benutzt (wenn es eine gibt). Wenn Sie Close() es in den Pool zurückgegeben, aber nicht zerstört, nur darauf warten, dass jemand es erneut verwenden.

Verwandte Themen