gpt4 book ai didi

mysql - 在使用 Connector/Net 的 C# 中,我应该为 MySql 命名参数使用哪个前缀?

转载 作者:可可西里 更新时间:2023-11-01 07:22:30 24 4
gpt4 key购买 nike

我正在使用 Connector/Net 6.8.3对于一个 C# 项目,并且已经使用它(或以前的版本)很长一段时间了。

在查看遗留代码时,我看到了与参数化查询相关的几种变体,并且一直在尝试确定它们之间的差异以及是否存在最佳实践。

查询字符串:

  • 示例 1:cmd.CommandText = "UPDATE table SET thing = @value;";

  • 示例 2:cmd.CommandText = "UPDATE table SET thing = ?value;";

添加参数:

  • 示例 3:cmd.Parameters.AddWithValue("@value", user_value);

  • 示例 4:cmd.Parameters.AddWithValue("?value", user_value);

  • 示例 5:cmd.Parameters.AddWithValue("value", user_value);

所有这些变体似乎都有效。我无法在官方文档中找到任何解释前缀用法差异的内容(@?)。然而,this devart.com page建议如下:

  • 未命名的参数可以指定为'?'符号。
  • 命名参数使用“:”或“@”前缀后跟参数名称来声明。请注意,如果 CommandText 中的参数与“@”前缀一起使用,则命令集合中 MySqlParameter 对象的名称应包含“@”前缀。如果 CommandText 中的参数包含“:”前缀,则应使用命令集合中 MySqlParameter 对象的名称,不带任何前缀。

最后一点有一些语法问题,但显示的示例似乎表明在使用“@”时语句 cmd.Parameters.AddWithValue("@value", user_value); 也应包括“@”,但在使用“:”时不包括在内。

但是,在我审查的许多功能方法中,查询在命令文本中使用“@(示例 1),但< em>不 AddWithValue() 语句(示例 5)

问题:

  • 添加参数时省略前缀的潜在后果是什么? (示例 5)

  • 没有理由在使用“?”前缀时添加参数名称,因为它用于未命名的参数吗? (示例 2)

最佳答案

问题的答案:

示例 5 使用命名参数对象。 this的用法是这样的:

cmd.CommandText = "UPDATE table SET thing = :value;";
cmd.Parameters.AddWithValue("value", user_value);

你可以这样比较:

cmd.CommandText = "UPDATE table SET thing = @value;";
cmd.Parameters.AddWithValue("@value", user_value);

请注意,使用冒号时不使用“@”。至少,它应该是这样的。它可能以另一种方式工作,因为在内部表示是相同的。

未命名参数的使用略有不同。

cmd.CommandText = "UPDATE table SET thing = ?;";
cmd.Parameters.AddWithValue("anyname", user_value);

参数的名称很可能是任何东西,它只会从索引值中获取。

虽然命名参数将通过名称访问,但未命名参数通过索引值使用,可能会分配错误的值,如下所示:

cmd.CommandText = "UPDATE table SET thing1 = ?, thing2 = ?;";
cmd.Parameters.AddWithValue("anyname1", user_value2);
cmd.Parameters.AddWithValue("anyname2", user_value1);

这里本应分配给“thing2”的“user_value2”被分配给了“thing1”,因为它出现在索引中的第一位。

enter image description here

关于mysql - 在使用 Connector/Net 的 C# 中,我应该为 MySql 命名参数使用哪个前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687650/

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