【问题标题】:Parameterized SqlCommand - advantage of specifying SqlDbType?参数化 SqlCommand - 指定 SqlDbType 的优势?
【发布时间】:2011-05-26 15:56:37
【问题描述】:

伙计们,

除非我弄错了,否则可以通过为每个参数指定或不指定SqlDbType 来生成参数化的sql 查询。看来我可以通过仅提供参数名称和参数值来构造一个 SqlParameter 。指定 SqlDbType 有什么好处?

【问题讨论】:

    标签: c# sql-server-2005 ado.net sqlcommand


    【解决方案1】:

    主要优势是性能。如果不指定参数类型,SqlClient 引擎会根据参数值进行推断。如果您在设计时就知道参数类型,那么指定它是一种避免推理步骤成本的简单方法。

    【讨论】:

    • Nicole - 性能损失显着吗?
    【解决方案2】:

    好处是:您可以清楚地控制SqlDbType 的参数。

    否则,ADO.NET 必须根据您提供的值进行猜测,例如在.AddWithValue 方法中。这些猜测在大多数情况下都很好——但如果你例如提供一个DBNull.Value,做出一个经过深思熟虑的猜测有点棘手......

    此外,如果您提供一个字符串,那么能够指定最大值通常是有益的。该字符串参数的长度(存储过程中VARCHAR(x) 定义中的x)。如果您不这样做,ADO.NET 将使用当前长度,这有时可能是好事也可能是坏事。

    总的来说:它只是给你更多的控制权,而且你的意图更明确/更清楚。

    【讨论】:

      【解决方案3】:

      如果您指定 SqlDbType,您可以确保您为参数提供的值根据提供的 SqlDbType 进行验证,因此如果数据不适合您,您会更早发现错误(否则您会从 SQL Server 获得异常)。

      【讨论】:

        【解决方案4】:

        我同意通过使用特定的 SqlDbType,您可以获得更多控制权。在处理文本时需要更多控制的另一个原因是在处理 unicode 文本时。例如,使用 SqlDbType.NVarChar 与 SqlDbType.VarChar。

        【讨论】:

        • 好点!我不使用 unicode 文本,但如果我这样做了,那将是一个问题。
        猜你喜欢
        • 2011-06-05
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 2018-07-13
        • 2022-01-08
        • 2010-09-23
        • 1970-01-01
        • 2011-04-13
        相关资源
        最近更新 更多