2010-02-15 11 views
7

Ich baue eine App in C#. Ich bin eine Verbindungszeichenfolge wie:Verbindung Timeout-Eigenschaft in Verbindung Zeichenfolge ignoriert

DSN=SomeDataSource; Trusted Connection = yes; Uid=SomeId; pwd=somePwd; Connection Timeout=x 

Aber egal, welchen Wert ich als x gesetzt (Connection Timeout = x), durch einen Haltepunkt setzt, kann ich sehen, dass mein DbConnection Objekt ConnectionTimeout Eigenschaft immer den Standardwert 15 hat.

Fehle ich hier etwas?

Danke.

+0

Versuchen Sie, X höher oder niedriger als 15 zu setzen? Haben Sie bestätigt, dass es sich tatsächlich um einen Timeout von 15 handelt, anstatt um X (z. B. ist der Wert, den Sie betrachten, ein Redhering). Außerdem wäre hier mehr Code und/oder Kontext hilfreicher (z. B. wenn Sie eine Verbindung zu einer Oracle-Datenbank usw. herstellen). –

+0

Ich habe genau dieses Problem. Das Seltsame ist, dass ich die Protokollierung hinzugefügt habe, um die Verbindungszeichenfolge und die benötigte Zeit zu bestätigen, und ich bekomme nur 9 oder 10 Sekunden statt der 120, nach denen ich frage, oder die 15, die die Standardeinstellung ist. – JohnOpincar

+0

Das gleiche hier. Zeitüberschreitung bei Verbindungsversuch = 5 und Verbindungstimeout = 5. Beide werden ignoriert und es dauert 15. Vielleicht 15 ist das Minimum ?? – AndyM

Antwort

14

Die Connection Timeout im ConnectionString steuert nur das Timeout für die Verbindung. Wenn Sie die Wartezeit für Ihre Befehle erhöhen müssen, verwenden Sie die Eigenschaft CommandTimeout von SqlCommand.

+0

Danke schön! –

1

Ich sehe nicht das Verhalten, das Sie angeben, zumindest wenn ich das Szenario mit einem SqlConnectionStringBuilder testen.

Die ConnectionTimeout Eigenschaft der Verbindung entspricht dem ConnectTimeout, der auf dem Builder festgelegt ist. Ich benutzte , und als Werte und alle wurden auf der Verbindung eingestellt.

mit System.Data.SqlClient;

var builder = new SqlConnectionStringBuilder(); 

builder.ApplicationName  = "My Demo App"; 
builder.ConnectTimeout  = 5; 
builder.DataSource   = "(local)"; 
builder.InitialCatalog  = "My Database"; 
builder.IntegratedSecurity = true; 

using(var connection = new SqlConnection(builder.ConnectionString)) 
{ 
    Console.WriteLine("Connection Timeout: {0}", connection.ConnectionTimeout); 
} 

Wenn Sie nicht mit SQL zu tun haben, könnten Sie bei Verwendung DbConnectionStringBuilder oder einer ihrer Untertypen aussehen auch. Im Allgemeinen finde ich es am sichersten, die Verbindungszeichenfolge programmgesteuert mit einem der verfügbaren Builder zu erstellen, sodass Sie jede fehlerhafte Formatierung der Verbindungszeichenfolge vermeiden können, die Sie zum Erstellen von Verbindungen verwenden.

-1

Ja, 15 ist das Minimum, je nachdem, was Sie tun. Wahrscheinlich eine Pro-Provider-Sache. Ich habe sogar festgestellt, wenn ich versuche, weniger als 15 (mit einigen Steuerelementen von Drittanbietern) mit SQL Native Client zu verwenden, stattdessen endlose Timeouts. Jawohl. Wenn ich 15 oder höher einstelle, verhält es sich wie erwartet.