什么是将参数传递给SQLCommand的最佳方法?

9 浏览
0 Comments

什么是将参数传递给SQLCommand的最佳方法?

如何以最佳方法传递参数给SQLCommand?你可以使用以下方式:

cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";

或者

cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";

或者

cmd.Parameters.Add("@Name").Value = "Bob";

第一种方法在性能或错误检查方面似乎会更好些。但我想更确切地了解一下。

0
0 Comments

问题的出现原因是原作者在使用SqlCommand传递参数时,采用了一种不太优雅的方式,即使用了SqlParameterCollection的Add方法,并在其中指定参数名称、参数类型和参数值。这种方式虽然能够实现参数传递,但代码冗长且不够简洁。因此,原作者开始使用了另一种更简单的方式,即使用AddWithValue方法来传递参数。这种方式不需要指定参数类型,只需要指定参数名称和参数值即可。经过多次使用,这种方式没有引发任何问题。原作者还提到,他通常会将私有变量传递给SqlCommand,这样就不需要过多担心隐式类型转换的问题。

为了解决这个问题,原作者采用了一种更简洁的方式来传递参数,即使用AddWithValue方法。这种方法不需要显式指定参数类型,只需要指定参数名称和参数值即可。通过这种方式,原作者在使用SqlCommand传递参数时能够更加简洁和高效。

下面是代码示例:

cmd.Parameters.AddWithValue("", "Bob");

0
0 Comments

在使用SQLCommand传递参数时,有多种方法可以选择。其中一种常见的方法是使用AddWithValue()方法。但是需要注意的是,这种方法可能会导致错误的隐式类型转换。因此,有人对此方法提出了疑问,并寻求了更好的解决方案。

在一篇博客文章中,作者提到了使用AddWithValue()方法可能存在的一些问题,并认为这并不是最佳的方法。此外,另一篇博客文章也指出了AddWithValue()方法的一些问题。

因此,从这些讨论中可以看出,问题出现的原因是AddWithValue()方法可能会导致错误的隐式类型转换,而解决方法是寻找更好的方法来传递参数。

虽然AddWithValue()方法是一种传递参数的常见方法,但在使用时需要注意可能出现的问题。为了避免错误的隐式类型转换,我们应该寻找更好的方法来传递参数。

0
0 Comments

最佳方法将参数传递给SQLCommand是什么?

问题的原因:

- 构造函数重载的参数列表增加了代码的复杂性和长度。

- 通过Add方法添加参数可能会导致参数值和SqlDbType值之间的歧义。

解决方法:

- 使用AddWithValue方法来添加参数,通过指定参数的名称和值来解决歧义问题。

- 对于双向和输出参数以及返回值,需要设置Size的值。

- 如果在循环中重复传递相同的逻辑参数,建议在循环外创建一个SqlParameter对象,并根据需要设置其大小。

- 如果处理的调用次数较少,则使用AddWithValue方法可以简化代码并易于维护。

2008年以来的变化:

- 在C#中,字符串是Unicode的,因此AddWithValue方法将生成一个NVARCHAR参数。

- VARCHAR列值在比较时会扩展为NVARCHAR,这会影响索引的使用。

- 解决方法:显式指定参数的类型,不再使用AddWithValue方法;或者将所有字符串列类型更改为NVARCHAR。

2019年的变化:

- 使用Dapper或ADO时,仍然存在[N]VARCHAR的问题。

- 存储空间和查询所需的内存将增加,在托管的数据库中尤其如此。

- 根据领域需求使用NVARCHAR类型。

根据不同的情况和需求,可以选择使用AddWithValue方法或显式指定参数类型来传递参数给SQLCommand。对于大型和高性能数据仓库,应根据领域类型选择最适合的数据类型。存储空间的成本正在下降,因此使用NVARCHAR类型可能是一个好的选择。然而,应根据具体情况进行考虑,避免盲目应用某种解决方法。

0