从C#传递SqlParameter而不考虑数据类型-性能

本文关键字:数据类型 性能 不考虑 传递 SqlParameter | 更新日期: 2023-09-27 18:28:13

我尝试了两种不同的方法来实例化我的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内部如何处理?最初,我假设它会隐式地将parameters数据类型转换为与sql查询的where子句中的Ex.进行比较的表列的数据类型。但我不确定。任何帮助都将不胜感激。

提前感谢

从C#传递SqlParameter而不考虑数据类型-性能

我不认为性能是这里的主要问题-尽管对于字符串(varchar)参数,如果不指定长度,ADO.NET运行时会将参数的最大长度设置为实际长度,这可能是个好主意,也可能不是。。。。

但是:没有用以下语句明确指定数据类型:

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

有一个潜在的大问题,即ADO.NET运行时必须猜测要使用的数据类型。它做得很好——大多数时候。但是,如果您提供NULL值,它应该如何猜测数据类型呢?或者,如果你提供50——那是INT吗?SmallIntTinyIntBigInt

不明确指定SqlParameter类型可能会导致不需要的(和不需要的)转换,这可能会降低性能。但更糟糕的是:它可能会导致彻底的错误,因为如果ADO.NET运行时的猜测不正确,您可能会出现运行时错误(例如,当它无法正确猜测某个东西是DATETIME或类似的东西时)。