-2

希望......这个标题是有道理的。但基本上这就是正在发生的事情。我正在创建一个表单,用户可以在其中查看、更新、插入和删除数据库中表中的记录。

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

现在如果我尝试插入一条新记录,它工作正常,直到我尝试不止一个。

这是我只放入 personID 记录。它工作正常:

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

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

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

如您所见,它忽略了 personID 条目,而只选择了 firstName。

如果不弄清楚是什么导致我无法一次放入两件事,我就无法在我的代码中走得更远。

这是我的插入代码:

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。

我不知道为什么会发生这种情况,我希望能提供一些意见。谢谢!

4

3 回答 3

2
myInsertSQL = "INSERT INTO person(";

在这里,您完全覆盖了 myInsertSQL 字符串,因此您之前放入的任何内容在您将其发送到数据库之前就已经消失了。

于 2013-09-09T09:58:55.207 回答
2

通过这样做,如果您没有覆盖第一个字符串 ( myInsertSQL = "INSERT INTO person(";),数据库将在 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...
于 2013-09-09T09:59:06.670 回答
1

您正在覆盖变量值

    myInsertSQL += personID.Text + "')";
    myInsertSQL = "INSERT INTO person(";
于 2013-09-09T10:00:15.373 回答