【问题标题】:Adding parameters to stored procedure in C# with AddWithValue method使用 AddWithValue 方法向 C# 中的存储过程添加参数
【发布时间】:2015-11-05 14:28:10
【问题描述】:

我正在修复代码中的 SQL 注入。 其中一种方法执行存储过程并附加参数违反SQL注入规则:

sqlCmd.CommandText = "updateSalesReps @repNumber='" + RepNumber + "', 
@ISONumber='" + ISONumber + "', @type='" + strUpdtType + "'";

现在,我正在添加参数:

sqlCmd.Parameters.AddWithValue("@rNumber", RepNumber);
sqlCmd.Parameters.AddWithValue("@isoNumber", ISONumber);
sqlCmd.Parameters.AddWithValue("@updateType",strUpdtType);

这是我的最终查询:

 sqlCmd.CommandText = "updateSalesReps @repNumber=@repNumber, 
 @ISONumber=@isoNumber, @type=@updateType";

我的问题是在我的存储过程中是否可以使用...@repNumber=@repNumber...,否则会产生命名歧义?

【问题讨论】:

标签: c# sql-injection sql-parametrized-query


【解决方案1】:

如果您在命令对象上指定 commandType 和 commandText 属性,则不需要这样做。假设您使用的是 SQL Server 存储过程,请尝试:

   SqlCommand sqlCmd = new SqlCommand();
   sqlCmd.CommandTimeout = 15;
   sqlCmd.CommandType = CommandType.StoredProcedure;
   sqlCmd.CommandText = "updateSalesReps"

然后使用 AddWithValue 添加到您的参数集合中。

参考:CommandType in MSDN

当您将 CommandType 属性设置为 StoredProcedure 时,您应该将 CommandText 属性设置为存储过程的名称。当您调用其中一个 Execute 方法时,该命令将执行此存储过程。

【讨论】:

  • 谢谢。当太多人在同一个文件上工作时,我会看到做同一件事的不同技术到令人沮丧的地步:)
  • 不要使用 AddWithValue,正如对问题的评论所说。
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 2012-10-08
  • 2015-11-20
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多