两个参数分配之间的差异

本文关键字:之间 分配 参数 两个 | 更新日期: 2023-09-27 18:00:19

实际上我有一个疑问,所以请澄清。我有两行做同样的工作,见下面的

1. cmd.Parameters.AddWithValue("@UserName",objBELUserDetails.UserName);
2. cmd.Parameters.Add("@UserName",SqlDbType.Nvarchar,50).
                                      Value=objBELUserDetails.UserName;

两条线的工作原理相同。

如果不提供大小,则大小默认为作为参数值的字符串的长度。如果省略类型,则它会查看参数值的类型,并使用大大小写语句将对象的类型映射到相关的Sql类型。显然,如果您自己提供类型,它有助于代码的性能,这样它就不必计算出来。

所以,你不认为第二行代码会比第一行花费更多的时间,并影响代码的性能吗?因为第一行有特定的类型和大小,所以编译器不需要时间来找出参数的类型和尺寸。不是吗?

两个参数分配之间的差异

所以,你不认为第二行代码会比第一行花费更多的时间,并影响代码的性能吗?因为第一行有特定的类型和大小,所以编译器不需要时间来找出参数的类型和尺寸。不是吗?

首先,我认为你的"第一个"answers"第二个"都错了。这是第二个版本,具有特定的类型和大小。

其次,如果隐式类型与您显式指定的类型相同,则性能将不会受到显著影响。您正在进行数据库查询-与几乎肯定涉及网络活动的调用的其余部分相比,您真的认为查找对象的类型和字符串的长度是可以测量的吗?如果类型被错误地推断为,您可能会在其他地方导致额外的转换,这是可以避免的。

指定参数的类型和大小还有一个更重要的原因:它使有关参数的信息变得明确,然后任何人都可以检查它是否符合数据库的期望。字符串可以转换为多种类型,数字也是如此。通过明确地声明类型,您就消除了任何歧义。

command.Parameters.Add如果不显式提供中的类型,它将尝试将输入隐式转换为期望的类型。

这种隐式转换可能不是最佳转换,因此可能会对性能造成影响。

选中此处:Parameters.AddWithValue vs.Parameters.Add