2012-03-19 44 views
4

我尝试两种不同的方式来实例化我SqlParameter对象从C#传递的SqlParameter没有数据类型 - 性能考虑

SQLParameter p = new SqlParameter("@DatabaseId", SqlDbType.VarChar, 5, Quarter.DataBaseId.ToString(); //line 1 

SQLParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId); // line 2 

我想知道是否有任何性能问题,当你不使用的数据类型和长度,同时创造参数? SQL Server如何在内部处理?最初,我认为它会隐式地将参数数据类型转换为与Ex进行比较的表列的数据类型。在sql查询的where子句中。但我不确定。任何帮助将不胜感激。

在此先感谢

回答

4

我不认为性能是主要问题就在这里 - 尽管,用绳子(VARCHAR)的参数,如果没有指定长度,ADO.NET运行时将设置最大该参数的实际长度,可能会或可能不会是这样一个伟大的想法的长度....

但是:没有明确指定这种说法的数据类型:

SqlParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId); 

具有潜在的巨大问题是ADO.NET运行时必须guess你想要使用什么数据类型。它在大部分时间都做得很好。但是如果你提供一个NULL值,它应该如何猜测数据类型?或者如果你提供50 - 是INTSmallIntTinyIntBigInt

未明确指定SqlParameter类型可能会导致不需要的转换 - 这可能会降低性能。但更糟的是:它可能导致彻底的错误,因为如果ADO.NET运行时的猜测是关闭的,那么最终可能会出现运行时错误(例如,当它无法正确猜测某些东西是DATETIME等)。