16 Stimmen

Fehler beim Versuch, über das Ende des Streams hinaus zu lesen, in MySQL

Ich laufe in ein Problem mit MySQL, wo ich den folgenden Fehler haben.

MySqlClient.MySqlException: Fatal error encountered during command execution. ---> 
MySql.Data.MySqlClient.MySqlException: Fatal error encountered attempting to read the resultset. ---> 
MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed. ---> 
System.IO.EndOfStreamException: Attempted to read past the end of the stream.

Dieser Fehler tritt auf, wenn ich das Programm über Nacht laufen lasse. Und er tritt nur selten auf, so dass es schwierig ist, die Ursache dafür zu finden. Ich verwende .NET 3.5 mit MySQLConnector 6.2.4.0.

Ich führe es mit dem folgenden Code aus.

        public DataSet Read(String query, List<KeyValuePair<String, object>> parameters)
    {
        MySqlDataAdapter adapter = null;
        DataSet returnVal = null;
        if (query != null && query.Length > 0)
        {
            try
            {
                returnVal = new DataSet();
                if (connection.State != ConnectionState.Open)
                {
                    connection.Open();
                }
                query = SQLHelper.formatSQL(query);
                MySqlCommand command = buildCommand(connection, query, parameters);

                Stopwatch stopwatch = new Stopwatch();

                command.CommandTimeout = 120;
                adapter = new MySqlDataAdapter(command);
                log.Debug(adapter.SelectCommand.CommandText);
                stopwatch.Start();
                adapter.Fill(returnVal);
                stopwatch.Stop();
                if (stopwatch.ElapsedMilliseconds < 150)
                {
                    log.Debug(stopwatch.ElapsedMilliseconds + "ms to run query");
                }
                else
                {
                    StringBuilder sb = new StringBuilder("");
                    if (parameters != null)
                    {
                        foreach (KeyValuePair<String, object> kvp in parameters)
                        {
                            sb.Append(kvp.Key);
                            sb.Append(" = ");
                            if (kvp.Value != null)
                            {
                                sb.Append(kvp.Value.ToString());
                            }
                            else
                            {
                                sb.Append("NULL");
                            }
                            sb.Append(", ");
                        }
                    }
                    log.Warn(stopwatch.ElapsedMilliseconds + "ms to run query: " + adapter.SelectCommand.CommandText + "Values: " + sb.ToString());
                }
            }
            catch (MySqlException msqlex)
            {
                log.Error(msqlex);
                returnVal = null;
                MessageBox.Show(query + "\r\n" + msqlex.ToString());
            }
            finally
            {
            }
        }
        else
        {
            log.Error("Query is empty. Returning null");
        }
        return returnVal;
    }

Wie Sie sehen können, versuche ich nicht, irgendetwas manuell zu lesen >< Ich mache eine adapter.fill(x) Ich habe also keine Kontrolle über das Lesen nach dem Ende des Streams.

Warum kann dies geschehen?

Bitte lassen Sie mich wissen, wenn Sie weitere Einzelheiten benötigen.

9voto

Nikki9696 Punkte 5862

Es sieht so aus, als ob es diese Meldung auslöst, wenn die Zeitüberschreitung überschritten wird. Es gibt eine Fehlerkorrektur, die dies NICHT tut, also wenn sie es behoben haben, dann tut es jetzt.

connector-net-de.a4.pdf (MySQL-Dokumentation)

MySQL Connector/NET löste keine EndOfStreamException-Ausnahme aus, wenn net_write_timeout überschritten wurde. (Fehler #53439)

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