我有一个SqlCommand
我想调用Prepare()
的对象CommandType = Text
(它不能是存储过程)。
为此,我需要将Size
参数上的属性设置为非零,否则会引发异常。Size
即使实际值的大小永远不会接近该值,将所有参数设置为最大可能大小是否有任何负面影响?有一个更好的方法吗?
我有一个SqlCommand
我想调用Prepare()
的对象CommandType = Text
(它不能是存储过程)。
为此,我需要将Size
参数上的属性设置为非零,否则会引发异常。Size
即使实际值的大小永远不会接近该值,将所有参数设置为最大可能大小是否有任何负面影响?有一个更好的方法吗?
我认为这样做的唯一潜在负面影响是为参数分配内存的成本。
由于您正在调用“Prepare()”,我猜您计划对同一个 SqlConnection 多次使用 SqlCommand,这表明可能会使用它的离散代码部分(如果连接关闭以准备好命令,命令文本必须在下次使用时重新传输到服务器)。
如果您知道参数的性质,似乎您可能对它们的潜在大小有所了解。如果没有,那么我真的看不出你有什么选择,而不是为每个人声明一个非常大的大小 - 大到足以容纳大多数/任何潜在价值。
如果您使用只接受参数名称和值的 SqlParameter 构造函数,框架就是这样做的。客户端可能效率低下,但我从未注意到查询性能的差异。
鉴于您使用的是 CommandType = Text,您应该能够以编程方式将大小设置为您发送的参数的实际大小。
当您的数据大小接近您发送的数据类型的最大大小时,您应该只会看到较差的性能。如果您的参数相对于命令文本的大小总是很大,那么从网络流量的角度来看,通过切换到存储过程,您只会看到性能上的最小提升。
请发布您的代码示例。您无需在参数上设置 Size 属性即可调用 .Prepare()。
顺便说一句,您可能并不真的需要调用 .Prepare(),尤其是在之后立即调用 .Execute() 时。