当我试图将细节添加到SQL数据库时,我得到了错误.这是我要添加的函数
本文关键字:添加 错误 函数 我要 数据库 细节 SQL | 更新日期: 2023-09-27 18:08:22
" 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;
}
}
除了Bobby Tables警报,您的insert
语句格式不正确:您需要将所有值括在括号中,而不是每个值:
insert into ... values (..., ..., ...)
变化
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 +"')";
让它工作
但是-根据这里的许多其他答案和评论-使用参数化查询更好。
假设出于某种原因,您仍然需要以这种方式执行插入语句(有更好的替代方法,如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;
首先查询的语法是假的尝试使用这个
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);