2

其实我有一个疑问,所以请清除它。我有 2 行做同样的工作,见下文

1. cmd.Parameters.AddWithValue("@UserName",objBELUserDetails.UserName);

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

两条线的工作原理相同。

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

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

4

2 回答 2

1

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

首先,我认为你在这里的“第一”和“第二”是错误的。这是具有特定类型和大小的第二个版本。

其次,如果隐式类型与您明确指定的类型相同,则性能根本不会受到显着影响。你正在做一个数据库查询——你真的认为找到对象的类型和字符串的长度与调用的其余部分相比甚至可以测量,这几乎肯定涉及网络活动?如果类型推断不正确,您最终可能会在其他地方导致额外的转换,这是可以避免的。

指定参数的类型和大小还有一个更重要的原因:它使有关参数的信息显式化,然后任何人都可以检查它是否与数据库的期望相匹配。字符串可以转换为多种类型- 数字也是如此。通过明确说明类型,您可以消除任何歧义。

于 2013-02-21T07:33:34.987 回答
0

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

而且这种隐式转换可能不是最佳的转换,因此可能会导致性能下降。

在这里检查:Parameters.AddWithValue vs.Parameters.Add

于 2013-02-21T07:30:47.780 回答