我对 MySQL 参数有点困惑。
我的代码的以下两个部分都工作正常。第一个使用参数@
:
const string query = "UPDATE `items` SET `name` = @name, `price` = @price WHERE `id` = @id";
try
{
using (MySqlCommand cmd = new MySqlCommand(query, Database.MyConnection))
{
cmd.Parameters.AddWithValue("name", name);
cmd.Parameters.AddWithValue("price", price);
cmd.Parameters.AddWithValue("id", id);
cmd.ExecuteNonQuery();
}
}
第二个使用参数?
:
const string query = "UPDATE `items` SET `name` = ?name, `price` = ?price WHERE `id` = ?id";
try
{
using (MySqlCommand cmd = new MySqlCommand(query, Database.MyConnection))
{
cmd.Parameters.AddWithValue("name", name);
cmd.Parameters.AddWithValue("price", price);
cmd.Parameters.AddWithValue("id", id);
cmd.ExecuteNonQuery();
}
}
这些答案 https://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c-sharp说两个@
or ?
工作正常。
甚至cmd.Parameters.AddWithValue("@name", name);
似乎有效(注意@
在名字里)。
为什么它们都可以与 MySQL 配合良好?
他们之间有区别吗?
哪一种是使用 MySQL 的正确方法?
感谢我能得到的任何帮助。
来自文档 http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html:
提供程序的早期版本使用“@”符号来标记 SQL 中的参数。这与 MySQL 用户变量不兼容,因此提供程序现在使用“?”用于在 SQL 中定位参数的符号。要支持旧代码,您可以在连接字符串上设置“旧语法=yes”。如果您这样做,请注意,如果您未能定义要在 SQL 中使用的参数,则不会引发异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)