c# - 两者参数赋值的区别

标签 c# sqlparameter prepared-statement

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

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

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

两条线工作相同。

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

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

最佳答案

So don't you think that the second line of code would take more time than first and affect the performance of the code where as the first line have specific type and the size so that compiler don't take time to find out the type and size of the parameters. Isn't it ?

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

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

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

关于c# - 两者参数赋值的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14996714/

相关文章:

c# - 将 AspNet Core 添加到标准 Dotnet Core 控制台应用程序

c# - 在 SqlDataAdapter.Update() 中获取错误消息

php - 循环内 PDO 语句的绑定(bind)参数

java - Update 语句中 @po 附近的语法不正确

PHP:无法使用 PDO 插入到 MYSQL 表中

c# - 不允许使用 `?` 检查空值和设置值

c# - 是否有使用 Microsoft 生成密码哈希的标准方法?

c# - MSChart:折线图 UI 看起来不正确

c# - .Net 中具有类似术语的 SQL 参数

c# - 如何将空值传递给 SqlCommand 的参数