Попытка прочитать прошлый конец ошибки потока в MySQL
я сталкиваюсь с проблемой с MySQL, где у меня есть следующая ошибка.
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.
эта ошибка возникает, когда у меня это работает на ночь. И это случается нечасто, поэтому трудно отследить, почему это происходит. Я использую .NET 3.5 с MySQLConnector 6.2.4.0.
я запускаю его, используя следующий код.
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 + "rn" + msqlex.ToString());
}
finally
{
}
}
else
{
log.Error("Query is empty. Returning null");
}
return returnVal;
}
как вы можете видеть, я не пытаюсь вручную читать что-либо >adapter.fill(x), поэтому у меня нет контроля над чтением последние конец потока.
почему это может произойти?
пожалуйста, дайте мне знать, если вам нужно больше подробностей.
1 ответов
похоже, что он бросает это, когда тайм-аут превышен. Есть исправление ошибки об этом не делать этого, так что если они исправили его, теперь это делает.
разъем-net-en.А4.pdf (документация MySQL)
MySQL Connector / NET не создавал исключение EndOfStreamException, когда net_write_timeout был превышен. (Ошибка #53439)