" INSERT语句中的列多于VALUES子句中指定的值。 VALUES子句中的值的数量必须与INSERT语句中指定的列数相匹配。
public bool AddStock(string BIKENAME,string ENGNUM,string CHASE,string COUNT,string ONR,string COLOR,string DATE)
{
try
{
SqlConnection con = SetSqlConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)VALUES('"+ BIKENAME +"'),('"+ ENGNUM +"'),('"+ CHASE +"'),('"+ COUNT +"'),('"+ ONR +"'),('"+ COLOR +"'),('"+ DATE +"')";
cmd.ExecuteNonQuery();
return true;
}
catch (SqlException ex)
{
return false;
}
}
答案 0 :(得分:3)
除了Bobby Tables Alert之外,您的insert
语句格式不正确:您需要将所有值括在括号中,而不是每个
insert into ... values (..., ..., ...)
答案 1 :(得分:1)
更改
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)VALUES('"+ BIKENAME +"'),('"+ ENGNUM +"'),('"+ CHASE +"'),('"+ COUNT +"'),('"+ ONR +"'),('"+ COLOR +"'),('"+ DATE +"')";
为:
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)VALUES('"+ BIKENAME +"','"+ ENGNUM +"','"+ CHASE +"','"+ COUNT +"','"+ ONR +"','"+ COLOR +"','"+ DATE +"')";
让它发挥作用。
但是 - 根据许多其他答案和评论 - 最好使用参数化查询。
答案 2 :(得分:0)
让我们说出于某种原因,你仍然需要以这种方式做插入语句(有更好的选择,比如linq-to-sql),把字符串绑在一起就像那样糟糕。 Sql注入,不可读的代码? 你应该至少做一些事情:
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)VALUES(@BIKENAME, @ENGNUM, @CHASE, @COUNT, @ONR, @COLOR, @DATE)";
cmd.Parameters.Add("@BIKENAME", "real value here");
cmd.Parameters.Add("@ENGNUM", "real value here");
...
...
int rowsAffected = cmd.ExecuteNonQuery();
if(rowsAffected > 0) return true;
答案 3 :(得分:0)
首先,查询的语法是false,尝试使用这个
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)
VALUES('"+ BIKENAME +"','"+ ENGNUM +"','"+ CHASE +"','"+ COUNT +"','"+ ONR +"','"+ COLOR +"','"+ DATE +"')";
为了避免sql注入,你应该使用参数化查询,如:
cmd.CommandText = "INSERT INTO stock1 (bikename,engineno,chaseno,count,onr,color,date)
VALUES(@BIKENAME ,@ENGNUM ,@CHASE,@COUNT,@ONR ,@COLOR ,@DATE)";
cmd.Parameters.Add("@BIKENAME", BIKENAME);
cmd.Parameters.Add("@ENGNUM ", ENGNUM );
cmd.Parameters.Add("@CHASE", CHASE);
cmd.Parameters.Add("@COUNT", COUNT);
cmd.Parameters.Add("@ONR", ONR );
cmd.Parameters.Add("@COLOR", COLOR );
cmd.Parameters.Add("@DATE", DATE);