尝试INSERT到具有多个条目的数据库时出现非常奇怪的错误

时间:2013-09-09 09:56:06

标签: mysql sql

HOPEFULLY .....标题很有意义。但基本上这是正在发生的事情。我正在创建一个表单,用户可以从数据库中的表中查看,更新,插入和删除记录。

我正在使用组合框来显示表格数据:

现在,如果我尝试插入新记录,它可以正常工作,直到我尝试多个记录。

这是我将personID记录放入。并且它工作正常:

http://i.imgur.com/E2oHlXy.png

但是,如果我尝试添加personID和firstName,则会发生这种情况:

http://i.imgur.com/aPpIvNh.png

如你所见,它忽略了personID条目,只是去了firstName。

我无法深入了解我的代码,却没有弄清楚导致我无法同时输入2件内容的原因。

这是我的INSERT代码:

string myInsertSQL;
        myInsertSQL = "INSERT INTO person(";
        myInsertSQL += "personID)";
        myInsertSQL += " VALUES ('";
        myInsertSQL += personID.Text + "')";
        myInsertSQL = "INSERT INTO person(";
        myInsertSQL += "firstName)";
        myInsertSQL += " VALUES ('";
        myInsertSQL += firstName.Text + "')";
        MySqlConnection conn = new MySqlConnection(connstring);
        MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);

使用上面的内容,它只会插入firstName。

我不知道为什么会这样,我会喜欢一些输入。谢谢!

3 个答案:

答案 0 :(得分:2)

myInsertSQL = "INSERT INTO person(";

在这里你完全覆盖了myInsertSQL字符串,所以无论你放在那里之前什么都没有发送到数据库。

答案 1 :(得分:2)

通过执行此操作,如果您没有覆盖第一个字符串(myInsertSQL = "INSERT INTO person(";),则DB会在2个不同的行上插入ID和名字。这里,它只执行第二个查询(即插入名字)。

尝试:

    myInsertSQL = "INSERT INTO person(";
    myInsertSQL += "personID, FirstName)";
    myInsertSQL += " VALUES ('";
    myInsertSQL += personID.Text + "', '"+ firstName.Text +"')";

请注意,这对SQL注入是开放的。尝试使用预准备语句而不是直接将纯文本注入查询:

string myInsertSQL = "INSERT INTO person(personID, firstName) VALUES (@personID, @firstName)";
MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);
cmd.Parameters.AddWithValue("@personID", personID.Text);
cmd.Parameters.AddWithValue("@firstName", firstName.Text);

编辑

根据您的评论,您尝试插入超过这两个值。这项工作是一样的。

错误表明您确实指定了不同数量的值和字段。你说的是6个值,但只列出5个(personID,firstName,address,phoneNumber,postCode)。我怀疑你忘记了姓氏:

string myInsertSQL = "INSERT INTO person(personID, lastName, firstName, address, phoneNumber, postCode) ";
myInsertSQL += "VALUES (@personID, @lastName, @firstName, @address, @phoneNumber, @postCode)";
MySqlCommand cmd = new MySqlCommand(myInsertSQL, conn);
cmd.Parameters.AddWithValue("@personID", personID.Text);
cmd.Parameters.AddWithValue("@lastName", lastName.Text);
cmd.Parameters.AddWithValue("@firstName", firstName.Text);
cmd.Parameters.AddWithValue("@address", address.Text);
cmd.Parameters.AddWithValue("@phoneNumber", phoneNumber.Text);
cmd.Parameters.AddWithValue("@postCode", postCode.Text);
// and so on...

答案 2 :(得分:1)

您正在覆盖变量值

    myInsertSQL += personID.Text + "')";
    myInsertSQL = "INSERT INTO person(";