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

Adding parameters to stored procedure in C# with AddWithValue method

我正在修复代码中的 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... 是否可以,否则会造成命名歧义?

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

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

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

参考:CommandType in MSDN

When you set the CommandType property to StoredProcedure, you should set the CommandText property to the name of the stored procedure. The command executes this stored procedure when you call one of the Execute methods.