添加参数的两种情况有啥区别?

Posted

技术标签:

【中文标题】添加参数的两种情况有啥区别?【英文标题】:What's the difference between the two cases of adding parameters?添加参数的两种情况有什么区别? 【发布时间】:2012-08-15 09:30:11 【问题描述】:

我想知道两者有什么区别:

 DBCmd.Parameters.Add("user_name", IfxType.VarChar);
 DBCmd.Parameters["user_name"].Value = p_u; 

DBCmd.Parameters.Add("user_name", p_u);

这里的最佳做法是什么,哪一种更安全,一种表现优于另一种?

【问题讨论】:

对不起我的错.. 我忽略了它。我将删除链接.. DBCmd.Parameters.Add 有多个重载 DBCmd.Parameters["user_name"].Value = p_u 直接给参数赋值。 【参考方案1】:

在显示的示例中,primary 的区别在于它知道要使用的类型是明确的 IfxType.VarChar - 这 可能 很重要,具体取决于具体情况,以及 IFX 是否将字符串默认为 CharVarCharLongVarChar。老实说,我不知道默认情况下会选择哪些。

显式通常是个好主意,但不需要通过索引器重新获取,因为新参数是从Add返回的;我可能会建议:

DBCmd.Parameters.Add("user_name", IfxType.VarChar).Value = p_u;

或者也许:

DBCmd.Parameters.Add("user_name", IfxType.VarChar, 20).Value = p_u;

其中20 是参数的大小

【讨论】:

@just_name “更安全” - 是的,我们是否将“显式”解释为“安全”,这可能不是不合理的; “更高的性能” - 索引器查找是一个非常小的额外(和不必要的)成本,可以通过我上面说明的.Add(...).Value = p_u; 来避免。 boxing and unboxing 的第二种方式,所以它可能会降低性能?或者如果我不确定datatypes,我可以使用它吗? @just_name 这两种方法的装箱/拆箱绝对没有区别;另外,我猜p_ustring - 字符串从不装箱(它们是引用类型)。 非常感谢,这意味着我可以互换使用它们而不会出现性能或铸造问题。【参考方案2】:

尽管有 Marc 的回答,但不推荐使用 Parameters.Add 添加值 - 它已替换为 AddWithValue

【讨论】:

严格来说,不完全是。 SqlParameterCollection.Add(string,object) 已被弃用 - 但这不是SqlParameterCollection。实际上,我更像是CreateParameter 的人,因为我主要针对抽象连接/命令接口编写代码,而这些接口没有。此外,即使在 SqlParameterCollection 上,我推荐的 .Add(name, type) 也不推荐使用。

以上是关于添加参数的两种情况有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中数组的两种写作有啥区别

ExtJS 3:创建自定义类的两种方式:有啥区别?

java中创建线程的两种方式有啥区别

字符串有啥区别?和字符串! (创建可选变量的两种方法)?

XMLHttpRequest.open();第一个参数post,get有啥不同,啥时候选啥,还有其他的,都有啥区别

添加路由的两种方式