我尝试了两种不同的方法来实例化我的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子句中。但我不确定。任何帮助将不胜感激。
提前致谢
答案 0 :(得分:4)
我不认为性能是这里的主要问题 - 尽管使用string(varchar)参数,如果不指定长度,ADO.NET运行时会将参数的最大长度设置为实际长度,这可能是也可能不是一个好主意......
但是:没有使用此语句显式指定数据类型:
SqlParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId);
有一个潜在的大问题,即ADO.NET运行时必须猜测您想要使用的数据类型。它做得非常好 - 大多数时候。但是,如果提供NULL
值,它应该如何猜测数据类型?或者,如果你提供50 - 是INT
? SmallInt
? TinyInt
? BigInt
?
未明确指定SqlParameter
类型可能会导致不必要的(和不合需要的)转换 - 这可能会降低性能。但更糟糕的是:它可能会导致彻底的错误,因为如果ADO.NET运行时的猜测结束,您最终可能会遇到运行时错误(例如,当它无法正确猜出某些内容是DATETIME
时)。