gpt4 book ai didi

c# - 在没有数据类型的情况下从 C# 传递 SqlParameter - 性能考虑

转载 作者:太空狗 更新时间:2023-10-29 23:25:23 26 4
gpt4 key购买 nike

我尝试了两种不同的方法来实例化我的 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 子句中。但我不确定。任何帮助将不胜感激。

提前致谢

最佳答案

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

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

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

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

不显式指定 SqlParameter 类型可能会导致不需要的(和不需要的)转换 - 这可能会降低性能。但更糟糕的是:它可能会导致彻底的错误,因为如果 ADO.NET 运行时的猜测关闭,您可能会遇到运行时错误(例如,当它无法正确猜测某物是 DATETIME 等时) .

关于c# - 在没有数据类型的情况下从 C# 传递 SqlParameter - 性能考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com