读取数据时插入

时间:2014-02-05 17:00:16

标签: c# mysql

我有以下程序,它给出了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();
    }

1 个答案:

答案 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);