gpt4 book ai didi

c# - Parameters.Add(string, object) 和 Parameters.AddWithValue 之间的区别

转载 作者:IT王子 更新时间:2023-10-29 03:51:08 24 4
gpt4 key购买 nike

我阅读了 MSDN 文档和示例 here我知道 Paramters.Add 调用的正确语法是:

   command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

您必须在其中指定参数名称、SqlDbType 以及带有 .Value 的值。

现在 Parameters.AddWithValue 调用的正确语法是:

   command.Parameters.AddWithValue("@demographics", demoXml);

单行并跳过 Type 部分。

我的问题是:当我这样做时,这是怎么回事,

   command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax

我没有遇到任何编译错误,甚至更奇怪,执行代码时一切似乎都正常工作?

最佳答案

在功能方面没有区别。事实上,两者都是这样做的:

return this.Add(new SqlParameter(parameterName, value));

他们弃用旧参数而支持 AddWithValue 的原因是为了增加清晰度,以及因为第二个参数是 object,这使得它不是很明显对一些人来说,调用了 Add 的重载,他们导致了截然不同的行为。

看看这个例子:

 SqlCommand command = new SqlCommand();
command.Parameters.Add("@name", 0);

乍一看,它似乎在调用 Add(string name, object value) 重载,但事实并非如此。它正在调用 Add(string name, SqlDbType type) 重载!这是因为 0 可以隐式转换为枚举类型。所以这两行:

 command.Parameters.Add("@name", 0);

 command.Parameters.Add("@name", 1);

实际上导致两种不同的方法被调用。 1 不能隐式转换为枚举,因此它选择了 object 重载。对于 0,它选择枚举重载。

关于c# - Parameters.Add(string, object) 和 Parameters.AddWithValue 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com