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

时间:2010-12-16 16:24:58

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

民间,

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

4 个答案:

答案 0 :(得分:6)

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

否则,ADO.NET必须根据您提供的值进行猜测,例如:在.AddWithValue方法中。那些猜测在大多数时候都很不错 - 但是如果你这样做的话提供一个DBNull.Value,做出一个经过深思熟虑的猜测有点棘手......

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

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

答案 1 :(得分:2)

如果指定SqlDbType,则确保为参数提供的值针对提供的SqlDbType进行验证,因此如果数据不适合您,则先捕获错误(否则您将从SQL Server获得异常)。 / p>

答案 2 :(得分:1)

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

答案 3 :(得分:0)

主要优势是性能。如果未指定参数类型,SqlClient引擎将从参数值推断出它。如果您在设计时知道参数类型,则指定它是一种避免推理步骤成本的简单方法。