错误:INSERT语句中的列多于VALUES子句中指定的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误:INSERT语句中的列多于VALUES子句中指定的值相关的知识,希望对你有一定的参考价值。
我检查了我的价值观,但它仍然说我没有足够的价值。我有一个不在insert-statement中的值,但它是一个标识值,所以我想我不必在我的代码中指定它?!?!
无论如何这里是代码:
string Fname = tbFIRSTNAME.Text.Trim();
string Lname = tbLASTNAME.Text.Trim();
string Sname = tbStreetName.Text.Trim();
string SSN = tbSSN.Text.Trim();
string CrimeID = cmbCRIMEID.Text.ToString();
string DangerLVL = cmbDANGERLEVEL.Text.ToString();
string CrimeDesc = rtbCrimeInfo.Text.Trim();
string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + '"' + Lname + '"' + Sname + '"' + SSN + '"' + DangerLVL + '"' + CrimeID + '"' + CrimeDesc + "')";
clsDB.InsUpDel(str);
答案
问题是你没有在你的值之间设置逗号(所以你实际输入的值不是7):
string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + "','" + Lname + "','" + Sname + "'," + SSN + "," + DangerLVL + "," + CrimeID + ",'" + CrimeDesc + "')";
显然,一些varchar类型也没有包含在''
之间。现在情况并非如此,但在添加逗号之后,由于类型不匹配,您可能会遇到其他错误
另一答案
正如其他人所说,您的基本错误是您没有用逗号分隔所有值。除此之外,你有一个很大的安全漏洞。这就是直接从文本框中使用您的值。这是软件设计中最不安全和最常见的安全漏洞,可能会导致您对应用程序进行SQL注入攻击。为避免这种情况,您应该使用参数化查询。这是一个恢复的代码,但你应该这样:
using(mysqlConnection conn = new MySqlConnection("YourConnectionString"))
{
conn.Open();
MySqlCommand command = conn.CreateCommand();
command.CommandText = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) VALUES (@FirstName, @LastName, @StreetName, @SSN, @CrimeID, @DangerLevel, @CrimeDescription)";
command.Parameters.AddWithValue("@FirstName", tbLASTNAME.Text.Trim());
command.Parameters.AddWithValue("@LastName", tbStreetName.Text.Trim());
/*
...
AND SO ON WITH OTHER PARAMETERS
...
*/
command.ExecuteNonQuery();
conn.Close();
}
以上是关于错误:INSERT语句中的列多于VALUES子句中指定的值的主要内容,如果未能解决你的问题,请参考以下文章
ORA-38101: INSERT VALUES 子句中的列无效: