2

我有一个SqlCommand我想调用Prepare()的对象CommandType = Text(它不能是存储过程)。

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

4

4 回答 4

3

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

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

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

于 2008-09-26T15:14:26.723 回答
0

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

于 2008-09-26T15:04:53.283 回答
0

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

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

于 2008-09-26T15:07:44.400 回答
0

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

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

于 2008-09-26T15:17:26.687 回答