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