2014-02-05 4 views
0

Я имею процедуру, описанную ниже, что дает ошибку MySQL 1064.Вставка при чтении данных

АПП 5 байт VARCHAR, сумма в два раза, а paytype SMALLINT (может быть либо 1, либо 2 на данный момент), paydate как дата , объяснение составляет 50 байт varchar в определении таблицы

Значения, которые я наблюдал, когда я отлаживал 4 байтовые строковые данные для apt, сумма 40, paytype 1, дата 01-02-2014, пояснение составляет около 20 байт строка.

Почему это дает ошибку 1064.

Поскольку чтение данных I'am?

Как вы можете видеть, я использую 2 разных соединения с разъемом. Я читаю данные и подключаю conn1.

private void CreateGlobalDebt() 
    { 
     MySqlConnection conn = new MySqlConnection(Pvar.cs); 
     MySqlConnection conn1 = new MySqlConnection(Pvar.cs); 
     conn.Open(); 
     conn1.Open(); 
     MySqlCommand cmd = new MySqlCommand("SELECT apt FROM building ORDER BY apt", conn); 
     MySqlDataReader reader = cmd.ExecuteReader(); 
     MySqlTransaction trans = conn1.BeginTransaction(); 
     while(reader.Read()) 
     { 
      string apt = reader["apt"].ToString(); 
      MySqlCommand cmd1 = new MySqlCommand("INSERT parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation",conn1); 
      cmd1.Parameters.Add("@apt", MySqlDbType.VarChar,5).Value = apt; 
      cmd1.Parameters.Add("@amount", MySqlDbType.Double).Value = Convert.ToDouble(_textBox[0].Text); 
      cmd1.Parameters.Add("@paytype", MySqlDbType.Int16).Value = PayType; 
      cmd1.Parameters.Add("@paydate", MySqlDbType.Date).Value = Convert.ToDateTime(_textBox[2].Text); 
      cmd1.Parameters.Add("@explanation", MySqlDbType.VarChar, 50).Value = _textBox[3].Text.ToString(); 
      try 
      { 
       cmd1.ExecuteNonQuery(); 
      } 
      catch (MySqlException e) 
      { 
       trans.Rollback(); 
       conn.Close(); 
       conn1.Close(); 
       MessageBox.Show(e.Number.ToString() + " -> " + e.Message.ToString()); 
       return; 
      } 
      cmd1.Parameters.Clear(); 
     } 
     trans.Commit(); 
     conn.Close(); 
     conn1.Close(); 
    } 

ответ

3

Ошибка 1064 является:

# 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса для использования ...

Команда:

INSERT parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation 

... отсутствует в INTO ключевое слово (which is standard, но некоторые базы данных пусть вы его опускаем) и заканчивая )

вы хотите:

MySqlCommand cmd1 = new MySqlCommand("INSERT INTO parameters (apt,amount,paytype,paydate,explanation) VALUES (@apt,@amount,@paytype,@paydate,@explanation)",conn1); 
+0

NOt INTO, но parathere в конце спасибо :)))) Потому что все мои INSERT без INTO, но это работает, кроме этого, где есть один паратезис меньше :) –

+0

Рад, что вы получили его! Я бы предложил использовать 'INSERT INTO', потому что [это более стандартный] (http://stackoverflow.com/questions/233919/insert-vs-insert-into) –

Смежные вопросы