【问题标题】:when i tried to add details into sql database,i got the error.this is my function to add当我尝试将详细信息添加到 sql 数据库中时,出现错误。这是我要添加的功能
【发布时间】:2014-06-13 07:36:14
【问题描述】:

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

          }
}

【问题讨论】:

标签: c# sql


【解决方案1】:

除了Bobby Tables Alert,您的insert 语句格式不正确:您需要将所有 值括在括号中,而不是每个值:

insert into ... values (..., ..., ...)

【讨论】:

    【解决方案2】:

    改变

    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 +"')";
    

    让它工作。

    但是 - 根据这里的许多其他答案和 cmets - 最好使用参数化查询。

    【讨论】:

      【解决方案3】:

      假设出于某种原因,您仍然需要以这种方式执行插入语句(有更好的替代方案,例如 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;
      

      【讨论】:

        【解决方案4】:

        首先查询的语法是假的尝试使用这个

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

        【讨论】:

          猜你喜欢
          • 2018-01-15
          • 1970-01-01
          • 1970-01-01
          • 2021-04-04
          • 2011-11-21
          • 1970-01-01
          • 2020-01-09
          • 2017-06-11
          • 1970-01-01
          相关资源
          最近更新 更多