C# 参数化SqlCommand-指定SqlDbType的优势?

C# 参数化SqlCommand-指定SqlDbType的优势?,c#,sql-server-2005,ado.net,sqlcommand,C#,Sql Server 2005,Ado.net,Sqlcommand,各位 除非我弄错了,否则可以通过为每个参数指定或不指定SqlDbType来生成参数化sql查询。似乎我可以通过只提供参数名和参数值来构造SqlParameter。指定SqlDbType的优点是什么?主要优点是性能。如果未指定参数类型,SqlClient引擎将根据参数值推断该类型。如果您在设计时知道参数类型,那么指定它是避免推理步骤成本的简单方法。好处是:您可以清楚地控制参数将是什么 否则,ADO.NET必须根据您提供的值进行猜测,例如在.AddWithValue方法中。这些猜测在大多数情况下都是

各位


除非我弄错了,否则可以通过为每个参数指定或不指定SqlDbType来生成参数化sql查询。似乎我可以通过只提供参数名和参数值来构造SqlParameter。指定SqlDbType的优点是什么?

主要优点是性能。如果未指定参数类型,SqlClient引擎将根据参数值推断该类型。如果您在设计时知道参数类型,那么指定它是避免推理步骤成本的简单方法。

好处是:您可以清楚地控制参数将是什么

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

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


所以总体而言:它只是给了您更多的控制,并且更明确/更清楚您的意图。

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

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

!我不使用unicode文本,但如果我这样做,这将是一个问题?