使用AddWithValue方法在C#中向存储过程添加参数

时间:2015-08-12 20:04:01

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

我正在修复代码中的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...,否则会产生命名歧义?

1 个答案:

答案 0 :(得分:2)

如果在命令对象上指定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方法时,该命令将执行此存储过程。