当我试图将细节添加到sql数据库时,我得到了错误。这是我添加的功能

时间:2014-06-13 07:36:14

标签: c# sql

" 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;

          }
}

4 个答案:

答案 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);