为什么要设置命令对象参数的size参数呢?

Sco*_*ttE 5 c# sql-server ado.net

我们的数据访问层使用命令对象与sql server通信.

在大多数情况下,我已将字段大小(与sql server中的列大小相匹配)硬编码到命令参数构建器中.

如:

SqlParameter param = new SqlParameter("@name", NVarChar, 4000);
Run Code Online (Sandbox Code Playgroud)

在这里指定一个值(在这个例子中为4000)而不是将其保留为0有什么好处?当列大小更改时必须重新编译时会很痛苦.

Rem*_*anu 5

实际上非常重要.使用不同参数长度发出的相同请求最终会作为过程高速缓存中的不同查询.随着时间的推移,这会导致缓存污染过度活跃的编译事件.这个问题是Linq2SQL和EF提供商如何实现的主要设计缺陷之一,例如.了解数据访问代码如何影响数据库性能.如果未针对相关问题正确指定参数长度,请参阅查询性能和计划缓存问题.