2012-04-11 8 views
51

Ich versuche, das Standard-SqlConnection Timeout von 15 Sekunden außer Kraft zu setzen und bin einen Fehler immer sagen, dass dieÄndern SqlConnection Timeout

Eigenschaft oder Indexer kann nicht zugeordnet werden, da sie nur gelesen wird.

Gibt es einen Weg um dies?

using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection)) 
{ 
    connection.Open(); 

    using (SqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     connection.ConnectionTimeout = 180; // This is not working 
     command.CommandText = "sproc_StoreData"; 
     command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID); 
     command.Parameters.AddWithValue("@AsOfDate", order.IncurDate); 

     command.ExecuteNonQuery(); 
    } 
} 
+3

Möchten Sie einen Verbindungstimeout festlegen, nachdem Sie versucht haben, die Verbindung zu öffnen? meinst du commandtimeout? –

+0

Ich verstehe wirklich nicht, warum sie die Eigenschaft schreibgeschützt gemacht haben. Sollte gelesen, geschrieben werden, IMO. –

+0

Die Eigenschaft ist nach der Verbindung schreibgeschützt. Siehe andere Antworten zur Diskussion. ConnectionTimeout hat Auswirkungen auf das Zeitlimit beim Verbindungsaufbau. Es ist oft hilfreich, dies für Azure SQL DB zu erhöhen. CommandTimeout wirkt sich beim Ausführen einer Abfrage auf das Zeitlimit aus. –

Antwort

107

verwenden Wenn Sie ein Timeout für eine bestimmte Abfrage zur Verfügung stellen möchten, dann ist Command der Weg nach vorn.

Seine Verwendung ist:

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds. 
10

Sie können immer es zu Ihrem Connection String hinzu:

connect timeout=180; 
+1

Verbindungstimeout unterscheidet sich von CommandTimeout. Connection Timeout entspricht der Zeit, die zum Auflösen der ersten Verbindung mit der Datenbank benötigt wird. CommandTimeout ändert das Zeitlimit für die bestimmte Abfrage. – m0g

33

Sie den Timeout-Wert in der Verbindungszeichenfolge festlegen können, aber nachdem Sie es schreibgeschützt angeschlossen haben. Sie können mehr lesen unter http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

Wie Anil impliziert, ist ConnectionTimeout möglicherweise nicht, was Sie brauchen; Es steuert, wie lange der ADO-Treiber beim Herstellen einer neuen Verbindung warten wird. Ihre Verwendung scheint zu zeigen, dass eine bestimmte SQL-Abfrage länger ausgeführt werden muss als normal, und in diesem Fall ist Anil genau richtig. Verwenden Sie CommandTimeout (das ist R/W), um die erwartete Beendigungszeit für einen einzelnen SqlCommand zu ändern.

3

Sie benötigen command.CommandTimeout

3

Sie Connection Timeout=180; zu Verbindungszeichenfolge hinzufügen können

+1

Verbindungstimeout unterscheidet sich von CommandTimeout. Connection Timeout entspricht der Zeit, die zum Auflösen der ersten Verbindung mit der Datenbank benötigt wird. CommandTimeout ändert das Zeitlimit für die bestimmte Abfrage. – m0g

5

Alte Post, aber, wie es für aufkommt, was ich gesucht wurde ich dachte, dass ich diese einige Informationen hinzufügen würden Thema. Ich wollte einen Kommentar hinzufügen, aber ich habe nicht genug Rep.

Wie andere gesagt haben:

connection.ConnectionTimeout für die erste Verbindung verwendet wird

command.CommandTimeout für einzelne Suche verwendet wird, Updates usw.

Aber:

Verbindung .ConnectionTimeout ist auch für das Festschreiben und Zurückrollen von Transaktionen verwendet.

Ja, das ist eine absolut verrückte Designentscheidung.

Wenn Sie also beim Commit oder Rollback ein Timeout erreichen, müssen Sie diesen Wert über die Verbindungszeichenfolge erhöhen.

8

Ein saubererer Weg ist, connectionString in XML-Datei zu setzen, zum Beispiel Web.Confing(WepApplication) oder App.Config(StandAloneApplication).

<connectionStrings> 
    <remove name="myConn"/> 
    <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/> 
    </connectionStrings> 

von Code können Sie Verbindung auf diese Weise erhalten:

public static SqlConnection getConnection() 
{ 
     string conn = string.Empty; 
     conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString; 
     SqlConnection aConnection = new SqlConnection(conn); 
     return aConnection; 
} 

Sie können einstellen, ConnectionTimeout nur Sie eine Instanz erstellen. Wenn instance create ist, ändern Sie diesen Wert nicht.