为什么重载的Add已被AddWithValue替换?

时间:2010-10-05 11:14:45

标签: .net sqlcommand

自.NET Framework 3.5 SP1以来,重载方法SqlParameterCollection.Add(String, Object)已被标记为已弃用。您应该使用2.0版中引入的AddWithValue()方法。

是否有充分理由将Add(String,Object)替换为AddWithValue()?我对改变很好,但我很好奇为什么要做出改变。

3 个答案:

答案 0 :(得分:4)

我认为这是因为您引用的MSDN文档中描述的滥用可能性:

  

使用时请小心   过载的   SqlParameterCollection.Add方法到   指定整数参数值。   因为这个重载需要一个值   输入Object,你必须转换   当对象类型的整数值   值为零,如下面的C#   示例演示。

parameters.Add("@pname", Convert.ToInt32(0));
  

如果您不执行此转换,   编译器假定你是   试图打电话给   SqlParameterCollection.Add(string,   SqlDbType)重载。

事实上,您为新API引用的文档同样多说:

  

Add的重载需要一个   字符串和对象已弃用   因为可能含糊不清   SqlParameterCollection.Add重载   采用String和SqlDbType   通过a的枚举值   字符串的整数可以是   被解释为是   参数值或相应的   SqlDbType值。

答案 1 :(得分:0)

我认为这是由于通过Object传递的值以及Add()的其他重载导致的模糊性。我可以回想起我无意中调用另一个版本的Add()的情况,因为我传递的值碰巧是一个不同的,更具体的数据类型。

答案 2 :(得分:0)

我知道是一篇旧文章,但是您应该阅读:

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

基本上是说AddWithValue有时会错误地推断出正确的类型。请改用Add