当我试图将细节添加到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;
          }
}

当我试图将细节添加到SQL数据库时,我得到了错误.这是我要添加的函数

除了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);