2014-02-05 65 views
0

我具有低于其给出MySQL错误1064插入在读取数据

贴切的程序是5个字节的varchar,量是双,paytype如SMALLINT(可以是用于瞬间1或2),作为paydate日期,解释是表中定义的50字节varchar

我调试4字节字符串数据的时候观察到的值为apt,金额为40,paytype为1,日期为01-02-2014,解释约为20字节串。

为什么它给出错误1064.

因为我正在读数据?

正如你所看到的,我使用2个不同的conn连接,我读取数据和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,但在最后谢谢:))))) 因为almmost所有我的INSERT都没有INTO,但它的工作除了这里有一个parathesis少:) –

+0

很高兴你得到它的工作!我建议使用'INSERT INTO',因为[它更标准](http://stackoverflow.com/questions/233919/insert-vs-insert-into) –