【问题标题】:Why has the overloaded Add been replaced with AddWithValue?为什么重载的 Add 被 AddWithValue 取代了?
【发布时间】:2010-10-05 11:14:45
【问题描述】:

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

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

【问题讨论】:

    标签: .net sqlcommand


    【解决方案1】:

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

    使用时要小心 的超载 SqlParameterCollection.Add 方法到 指定整数参数值。 因为这个重载的值是 类型对象,您必须转换 对象类型的整数值,当 值为零,如下C# 示例演示。

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

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

    事实上,您为新 API 引用的文档也说了很多:

    Add 的重载需要一个 不推荐使用字符串和对象 因为可能与 SqlParameterCollection.Add 重载 需要一个 String 和一个 SqlDbType 传递一个枚举值 带字符串的整数可以是 被解释为 参数值或对应的 SqlDbType 值。

    【讨论】:

      【解决方案2】:

      我认为这是由于通过Object 传递的值以及Add() 的其他重载导致的模棱两可。我可以回忆起我无意中调用了不同版本的 Add() 的情况,因为我传递的值恰好是不同的、更具体的数据类型。

      【讨论】:

        【解决方案3】:

        我知道这是一篇旧帖子,但你应该阅读:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-02
          • 2016-04-06
          • 1970-01-01
          • 2015-12-18
          • 1970-01-01
          • 1970-01-01
          • 2016-05-20
          • 2023-02-02
          相关资源
          最近更新 更多