Versuchte zu Lesen, Vergangenheit Ende der stream-Fehler in MySQL
Ich in ein problem mit MySQL, wo ich die folgende Fehlermeldung.
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 diesen über Nacht laufen. Und es passiert nur selten, deshalb ist es schwer auf die Spur, WARUM es passiert. Ich bin mit .NET 3.5 mit MySQLConnector 6.2.4.0.
Mir läuft es mit dem folgenden code.
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, bin ich nicht manuell versuchen, etwas zu Lesen >< ich mache einen adapter.fill(x)
, so habe ich keine Kontrolle über das Lesen über das Ende des Streams.
Warum kann das passiert?
Bitte lassen Sie mich wissen, falls Sie weitere details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht wirft es, dass, wenn der timeout überschritten wird. Es gibt einen bug-fix zu es NICHT zu tun, so dass, wenn Sie es behoben, jetzt funktioniert es.
connector-net-en.a4.pdf-Datei (MySQL-Dokumentation)
MySQL Connector/NET nicht werfen eine EndOfStreamException Ausnahme, wenn net_write_timeout überschritten wurde.
(Bug #53439)
....database=sample_db;ConnectionTimeout=600;DefaultCommandTimeout=600;