自.NET Framework 3.5 SP1以来,重载方法SqlParameterCollection.Add(String, Object)已被标记为已弃用。您应该使用2.0版中引入的AddWithValue()方法。
是否有充分理由将Add(String,Object)替换为AddWithValue()?我对改变很好,但我很好奇为什么要做出改变。
答案 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
。