Ich versuche, das Standardzeitlimit SqlConnection
von 15 Sekunden zu überschreiben, und erhalte die Fehlermeldung, dass die
Eigenschaft oder Indexer können nicht zugewiesen werden, da sie schreibgeschützt sind.
Gibt es einen Weg, dies zu umgehen?
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();
}
}
c#
.net
sql-server
sqlconnection
Haymak3r
quelle
quelle
Antworten:
Wenn Sie ein Zeitlimit für eine bestimmte Abfrage angeben möchten, ist CommandTimeout der richtige Weg.
Seine Verwendung ist:
command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.
quelle
Sie können den Timeout-Wert in der Verbindungszeichenfolge festlegen, aber nachdem Sie die Verbindung hergestellt haben, ist er schreibgeschützt. Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx
Wie Anil andeutet, ist ConnectionTimeout möglicherweise nicht das, was Sie benötigen. Es steuert, wie lange der ADO-Treiber beim Herstellen einer neuen Verbindung wartet. Ihre Verwendung scheint darauf hinzudeuten, dass Sie länger als normal auf die Ausführung einer bestimmten SQL-Abfrage warten müssen. In diesem Fall ist Anil genau richtig. Verwenden Sie CommandTimeout (R / W), um die erwartete Abschlusszeit für einen einzelnen SqlCommand zu ändern.
quelle
Ein sauberere Weg ist , um Satz Connection in XML - Datei, zum Beispiel
Web.Confing(WepApplication)
oderApp.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>
Durch Code können Sie Verbindung auf folgende 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 festlegen, dass
ConnectionTimeout
nur Sie eine Instanz erstellen. Wenn eine Instanz erstellt wird, ändern Sie diesen Wert nicht.quelle
Sie können es jederzeit zu Ihrer Verbindungszeichenfolge hinzufügen:
connect timeout=180;
quelle
Sie können
Connection Timeout=180;
Ihrer Verbindungszeichenfolge hinzufügenquelle
Sie können auch den SqlConnectionStringBuilder verwenden
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString); builder.ConnectTimeout = 10; using (var connection = new SqlConnection(builder.ToString())) { // code goes here }
quelle
Alter Beitrag, aber als sich herausstellte, wonach ich gesucht hatte, dachte ich, ich würde diesem Thema einige Informationen hinzufügen. Ich wollte einen Kommentar hinzufügen, aber ich habe nicht genug Wiederholungen.
Wie andere gesagt haben:
connection.ConnectionTimeout wird für die Erstverbindung verwendet
command.CommandTimeout wird für einzelne Suchvorgänge, Aktualisierungen usw. verwendet.
Aber:
connection.ConnectionTimeout wird auch zum Festschreiben und Zurücksetzen von Transaktionen verwendet.
Ja, das ist eine absolut verrückte Designentscheidung.
Wenn beim Festschreiben oder Rollback ein Timeout auftritt, müssen Sie diesen Wert über die Verbindungszeichenfolge erhöhen.
quelle
Sie können das Verbindungszeitlimit auf die Verbindungsebene und die Befehlsebene einstellen.
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10"; using (var con = new SqlConnection(connectionString)) { }
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword"; using (var con = new SqlConnection(connectionString)) { using (var cmd =new SqlCommand()) { cmd.CommandTimeout = 10; } }
quelle
Sie müssen verwenden
command.CommandTimeout
quelle