11 Stimmen

MySqlException: Zeitüberschreitung - Das Erhöhen des Verbindungstimeouts hat keine Wirkung gezeigt

Ich habe eine Abfrage, die länger dauert, um ausgeführt zu werden, wenn die Datenbank größer wird. Die Abfrage ist optimiert und notwendig, aber meine C#-Konsolenanwendung hat mir kürzlich diesen Fehler gemeldet:

Nicht behandelte Ausnahme: MySql.Data.MySqlClient.MySqlException: Zeitüberschreitung.

Das Erhöhen des Verbindungstimeouts in der Verbindungszeichenfolge hilft nicht; Ich habe es von

 

Connect Timeout=28800

zu

 

Connect Timeout=128800

erhöht, aber ich erhalte trotz dieser Änderung immer noch den Fehler.

Wenn ich die Abfrage von MySQL Workbench ausführe, dauert es nur etwa 10 Sekunden, daher bin ich mir nicht sicher, wie ich diese unbehandelte Ausnahme verhindern soll.

Gibt es neben "der Zeit, die eine Abfrage dauert" auch andere Dinge, die diese Ausnahme hervorrufen können?

23voto

Dragonalighted Punkte 365

Ich hatte dieses Problem schon einmal. Die ConnectTimeout-Eigenschaft gilt nur für Timeouts, die beim Verbinden mit der Datenbank auftreten, nicht jedoch für Abfragen.

CommandTimeout legt jedoch fest, wie lange es auf die Rückkehr der Abfrage warten soll. Ich glaube, der Standardwert beträgt 30 Sekunden. Überprüfen Sie die Dokumentation Ihrer MySql-Bibliothek, aber für SqlCommand beträgt der CommandTimeout in Sekunden, nicht Millisekunden.

4voto

keithl8041 Punkte 2223

Sie können auch versuchen, "default command timeout=360" in Ihren Verbindungszeichenfolgen hinzuzufügen; z. B.

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;default command timeout=20;

Diese Option ist ab Connector/NET-Version 5.1.4 verfügbar.

[Ich habe das von connectionstrings.com/mysql/ übernommen]

3voto

Robert H Punkte 11027

Wenn du uns deine Methode zeigen kannst, können wir helfen, die Fehler zu finden.

Wenn mich die Geschichte (und SO ) etwas gelehrt hat, dann

"Du solltest Parameterized SQL statements verwenden, bevor du irgendwelchen Code postest" 

Wenn du unsicher bist, wie man parametrisierte Befehle verwendet, hier ist ein Beispiel (entnommen einer der Antworten, in der ich keine parametrisierten SQL verwendet habe)

var command = new MySqlCommand(
    "SELECT * FROM tblPerson WHERE LastName = @Name AND Height > @Height AND BirthDate < @BirthDate", connection);

command.Parameters.AddWithValue("@Name", lastname);
command.Parameters.AddWithValue("@Height", height);
command.Parameters.AddWithValue("@Name", birthDate);

Versuche das, wenn du es noch nicht gemacht hast, und poste etwas Code :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X