HOPEFULLY .....标题很有意义。但基本上这是正在发生的事情。我正在创建一个表单,用户可以从数据库中的表中查看,更新,插入和删除记录。
我正在使用组合框来显示表格数据:
现在,如果我尝试插入新记录,它可以正常工作,直到我尝试多个记录。
这是我将personID记录放入。并且它工作正常:
但是,如果我尝试添加personID和firstName,则会发生这种情况:
如你所见,它忽略了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。
我不知道为什么会这样,我会喜欢一些输入。谢谢!
答案 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(";