Ожидается прочитать 4 байта заголовка, но только получил 0 - PullRequest
0 голосов
/ 25 сентября 2018

Я написал службу 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();
                    }
                }
            }
        }
    }

Есть предложения, как исправить это исключение?

...