自 .NET Framework 版本 3.5 SP1 起,重载方法SqlParameterCollection.Add(String, Object)已被标记为已弃用。您应该使用 2.0 版引入的AddWithValue()方法。
是否有充分的理由将 Add(String, Object) 替换为 AddWithValue()?我对改变很好,但我很好奇为什么会做出改变。
自 .NET Framework 版本 3.5 SP1 起,重载方法SqlParameterCollection.Add(String, Object)已被标记为已弃用。您应该使用 2.0 版引入的AddWithValue()方法。
是否有充分的理由将 Add(String, Object) 替换为 AddWithValue()?我对改变很好,但我很好奇为什么会做出改变。
我认为这是因为您引用的 MSDN 文档中描述的滥用可能性:
使用 SqlParameterCollection.Add 方法的此重载来指定整数参数值时要小心。由于此重载采用 Object 类型的值,因此必须在值为零时将整数值转换为 Object 类型,如以下 C# 示例所示。
parameters.Add("@pname", Convert.ToInt32(0));
如果您不执行此转换,编译器会假定您正在尝试调用 SqlParameterCollection.Add (string, SqlDbType) 重载。
事实上,您为新 API 引用的文档也说了这么多:
采用字符串和对象的 Add 重载已被弃用,因为可能与 SqlParameterCollection.Add 重载采用 String 和 SqlDbType 枚举值,其中通过字符串传递整数可能被解释为参数值或对应的 SqlDbType 值。
我相信这是由于通过传递的值Object
和Add()
. 我可以回忆起我无意中调用了不同版本的 Add() 的情况,因为我传递的值恰好是不同的、更具体的数据类型。
我知道这是一篇旧文章,但您应该阅读:
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
基本上是说AddWithValue
有时可能会错误地推断出正确的类型。改为使用Add
。