c#odbcCommand参数化出错

时间:2014-02-15 07:39:53

标签: c# mysql database

执行以下代码会给我错误。 列'用户名'不能为空
值正在变量中传递。但我认为OdbcCommand陈述没有准备好。

    OdbcCommand cmd = new OdbcCommand 
    { 
    CommandText = 
    "INSERT INTO orders(username,name,email,address,contact_number,html_email)
    VALUES(@username,@name,@email,@address,@contact_number,@html_email)",

    Connection = Con 
    };

    cmd.Parameters.AddWithValue("@username", username);
    cmd.Parameters.AddWithValue("@name", name);
    cmd.Parameters.AddWithValue("@email", email);
    cmd.Parameters.AddWithValue("@address", add);
    cmd.Parameters.AddWithValue("@contact_number", contact);
    cmd.Parameters.AddWithValue("@html_email", table);

    billid = cmd.ExecuteScalar().ToString();

3 个答案:

答案 0 :(得分:0)

使用ExecuteNonQuery代替ExecuteScalar()执行插入语句。

int affectedRows = cmd.ExecuteNonQuery();

您可能想要返回最后插入的记录ID,这就是您使用ExecuteScalar的原因。 OdbcCommand不支持命名参数,因此您需要在查询中使用占位符。总的来说,您需要将查询更改为此

CommandText = "INSERT INTO orders(username,name,email,address,contact_number,html_email)
               VALUES(?,?,?,?,?,?) SELECT SCOPE_IDENTITY()";

现在您可以使用ExecuteScalar()

billid = cmd.ExecuteScalar().ToString();

答案 1 :(得分:0)

试试这个:

OdbcCommand cmd = new OdbcCommand("INSERT INTO orders(username,name,email,address,contact_number,html_email)
VALUES(@username,@name,@email,@address,@contact_number,@html_email)",Con);

cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@address", add);
cmd.Parameters.AddWithValue("@contact_number", contact);
cmd.Parameters.AddWithValue("@html_email", table);

billid = cmd.ExecuteNonQuery();

答案 2 :(得分:0)

OdbcCommand不支持命名参数语法,而应使用问号占位符:

OdbcCommand cmd = new OdbcCommand 
{ 
CommandText = 
"INSERT INTO orders(username,name,email,address,contact_number,html_email)
VALUES(?, ?, ?, ?, ?, ?)",

Connection = Con 
};

cmd.Parameters.AddWithValue("@p1", username);
cmd.Parameters.AddWithValue("@p2", name);
cmd.Parameters.AddWithValue("@p3", email);
cmd.Parameters.AddWithValue("@p4", add);
cmd.Parameters.AddWithValue("@p5", contact);
cmd.Parameters.AddWithValue("@p6", table);

int affectedRecords = cmd.ExecuteNonQuery();