SqlParameter Size - 设置为最大大小的负面影响?

Posted

技术标签:

【中文标题】SqlParameter Size - 设置为最大大小的负面影响?【英文标题】:SqlParameter Size - negative effects of setting to max size? 【发布时间】:2010-09-13 11:44:20 【问题描述】:

我有一个SqlCommand,我想在其CommandType = Text 上调用Prepare()(它不能是存储过程)。

为此,我需要将参数上的Size 属性设置为非零,否则会引发异常。将所有参数上的Size 设置为最大可能大小是否有任何负面影响,即使实际值的大小永远不会接近那个大小?有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我认为这样做的唯一潜在负面影响是为参数分配内存的成本。

由于您正在调用“Prepare()”,我猜您正计划针对同一个 SqlConnection 多次使用 SqlCommand,这表明可能会使用它的离散代码部分(如果连接关闭一个准备好的命令,命令文本必须在下次使用时重新传输到服务器)。

如果您了解参数的性质,似乎您可能对它们的潜在大小有所了解。如果没有,那么我真的看不出你有什么选择,而不是为每个声明一个非常大的大小 - 大到足以容纳大多数/任何潜在值。

【讨论】:

【参考方案2】:

如果您使用只接受参数名称和值的 SqlParameter 构造函数,框架就是这样做的。客户端可能效率稍低,但我从未注意到查询性能有差异。

【讨论】:

【参考方案3】:

鉴于您使用的是 CommandType = Text,您应该能够以编程方式将大小设置为您发送的参数的实际大小。

只有当您的数据大小接近您发送的数据类型的最大大小时,您才会看到性能下降。如果您的参数相对于命令文本的大小总是很大,那么从网络流量的角度来看,切换到存储过程只会看到最小的性能提升。

【讨论】:

【参考方案4】:

请发布您的代码示例。您无需在参数上设置 Size 属性即可调用 .Prepare()。

顺便说一句,您可能真的不需要调用 .Prepare(),尤其是当您在之后立即调用 .Execute() 时。

【讨论】:

以上是关于SqlParameter Size - 设置为最大大小的负面影响?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 If 检查 SqlParameter 是不是为真

无法将参数值从 SqlParameter 转换为字符串

将实体类/匿名对象转换为SqlParameter列表

将实体类匿名对象转换为SqlParameter列表

表空间最大值怎么计算

SqlParameter 的使用