我有以下程序,它给出了mysql错误1064。
apt为5字节varchar,amount为double,paytype为smallint(目前可以是1或2),paydate为date,解释为表定义中的50字节varchar
我调试apt的4字节字符串数据时观察到的值,数量为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();
}
答案 0 :(得分: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);