C#MySQL参数:?要么 @

Gab*_* L. 4 c# mysql

我对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();
    }
}
Run Code Online (Sandbox Code Playgroud)

其次使用参数?:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这些答案@可以说也可以?正常工作.甚至cmd.Parameters.AddWithValue("@name", name);似乎工作(注意@名称中).

  1. 为什么所有这些都适用于MySQL?

  2. 它们之间有区别吗?

  3. 哪一个是与MySQL一起使用的正确方法?

感谢您的帮助.

Cod*_*ter 6

文档:

提供程序的早期版本使用"@"符号标记SQL中的参数.这与MySQL用户变量不兼容,因此提供程序现在使用'?' 用于在SQL中查找参数的符号.要支持旧代码,可以在连接字符串上设置"old syntax = yes".如果您这样做,请注意,如果您未能定义要在SQL中使用的参数,则不会抛出异常.