【问题标题】:Call stored procedure with multiple parameters [duplicate]调用具有多个参数的存储过程[重复]
【发布时间】:2012-10-02 14:40:16
【问题描述】:

可能重复:
C# stored procedure with parameters

我正在尝试从 c# 调用存储过程,并传入多个参数,但无法使其正常工作。这是我到目前为止所拥有的。

cmd = new SqlCommand();
cmd = dbConn.CreateCommand();
cmd.CommandText = "inserttoTable @size = " + size + ", @brand = " + brand + ", @manu = " + manu + ", @t= " + id.ToString();
cmd.ExecuteNonQuery();

尺寸、品牌和manu 都是字符串。 inserttoTable 是存储过程。

我收到以下错误:System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'TO'.

【问题讨论】:

  • 一方面,如果它们是字符串,则需要用撇号包围它们,但是当变量带有撇号时,这会导致问题。您最好使用我上面评论中显示的参数化查询。
  • 这很容易受到 SQL 注入攻击。请重新考虑使用参数化查询。
  • 在我看来不像是一个骗子。类似,是的,确切的重复,不是。

标签: sql-server stored-procedures


【解决方案1】:

【讨论】:

    【解决方案2】:

    如果你使用参数并将命令类型更改为存储过程,你会遇到更少的问题:

    cmd = new SqlCommand();
    cmd = dbConn.CreateCommand();
    cmd.CommandText = "inserttoTable";
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    
    cmd.Parameters.Add(new SqlParameter("@size", size));
    cmd.Parameters.Add(new SqlParameter("@brand", brand));
    cmd.Parameters.Add(new SqlParameter("@manu", manu));
    cmd.Parameters.Add(new SqlParameter("@t", id.ToString()));
    
    cmd.ExecuteNonQuery();
    

    【讨论】:

      【解决方案3】:

      虽然这不是调用存储过程的最佳方法,但如果在字符串参数周围加上单引号,应该没问题。

      cmd = new SqlCommand(); 
      cmd = dbConn.CreateCommand(); 
      cmd.CommandText = "inserttoTable @size = '" + size + "', @brand = '" + brand + "', @manu = '" + manu + "', @t= '" + id.ToString() + "'"; 
      cmd.ExecuteNonQuery(); 
      

      此代码非常过时,10 年前就已弃用。

      【讨论】:

      • 那么为什么这完全被否决了?
      • 我没有足够的声望来投反对票,所以我没有这样做
      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多