Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不使用数据类型的情况下从C#传递SqlParameter-性能考虑_C#_Ado.net - Fatal编程技术网

在不使用数据类型的情况下从C#传递SqlParameter-性能考虑

在不使用数据类型的情况下从C#传递SqlParameter-性能考虑,c#,ado.net,C#,Ado.net,我尝试了两种不同的方法来实例化我的SqlParameter对象 SQLParameter p = new SqlParameter("@DatabaseId", SqlDbType.VarChar, 5, Quarter.DataBaseId.ToString(); //line 1 SQLParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId); // line 2 我想知道在创建参数时不使用数据类型和长度是否会影响

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


提前感谢

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

但是:未使用此语句显式指定数据类型:

SqlParameter p = new SqlParameter("@DatabaseId", Quarter.DataBaseId);
有一个潜在的大问题,ADO.NET运行时必须猜测要使用的数据类型。它做得相当好-大多数时候。但是如果您提供一个
NULL
值,它应该如何猜测数据类型呢?或者,如果您提供50-这是一个
INT
<代码>SmallInt<代码>TinyInt<代码>BigInt

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