Я написал службу Windows, которая использует SSH (Secure Shell) для копирования данных из файла CSV в онлайн-базу данных PhpMyAdmin.
При открытии соединения произошел триггер ошибки
MySql.Data.MySqlClient.MySqlProtocolException
HResult=0x80131509
Message=Packet received out-of-order. Expected 2; got 1.
Source=mscorlib
StackTrace:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
В качестве решения я решил оставить текущий поток и добавить следующую строку до открытия соединения.
Task.Delay(TimeSpan.FromMilliseconds(10000)).Wait();
К сожалению, это приводит к другой ошибке,
MySql.Data.MySqlClient.MySqlException
HResult=0x80004005
Message=Failed to read the result set.
Source=MySqlConnector
StackTrace:
Inner Exception 1:
EndOfStreamException: Expected to read 4 header bytes but only received 0.
Когда я случайно изменил значение времени, в течение которого хранится поток, вышеуказанные 2 ошибки различаются между собой.
Связанный код:
Public void insert(string connString){
using (var conn = new MySqlConnection(connString))
{
Task.Delay(TimeSpan.FromMilliseconds(10000)).Wait();
conn.Open();
using(var reader = new StreamReader(@"C:\Users\Admin\source\Bargstedt.csv"))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
string querynew = "INSERT INTO jobs"
+ "(nJobNumber,strClientReference,datPromisedDelivery)"
+ "VALUES (@jobNo, @strClientName, @strClientReference)";
using (var cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText= querynew;
cmd.Parameters.AddWithValue("jobNo", values[0]);
cmd.Parameters.AddWithValue("strClientName", values[1]);
cmd.Parameters.AddWithValue("strClientReference",values[2]);
cmd.ExecuteNonQuery();
}
}
}
}
}
Есть предложения, как исправить это исключение?