C#MySQL参数:?或@

C#MySQL参数:?或@,c#,mysql,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

我对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();
    }
}
@
都可以。 偶数
cmd.Parameters.AddWithValue(“@name”,name)
似乎有效(注意名称中的
@

  • 为什么它们都可以与MySQL配合使用

  • 他们之间有区别吗

  • 哪一种是MySQL的正确使用方式

  • 感谢您对我的帮助。

    来自:

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


    看来情况又变了

    从更新的文档中

    旧语法,旧语法,使用旧语法,使用旧语法-此选项在Connector/Net 5.2.2中被弃用。现在应该使用“@”符号作为参数标记来编写所有代码

    也来自

    虽然仍然支持使用“?”的旧模式,但现在首选使用“@”符号作为参数。为避免将“@”符号与用户变量组合使用时发生冲突,请参阅第7章“连接器/网络连接字符串选项参考”中的“允许用户变量连接字符串”选项。旧的语法连接字符串选项现在已被弃用


    @然后呢?都是MySQL中标记参数的符号,您甚至可以像

    command.CommandText = @"UPDATE sellinginventorytable SET cqty=cqty+@aqty,`date`=CURRENT_TIMESTAMP(),`user`=@user WHERE cid=?cid;
                            INSERT INTO internaltranstable SET `type`='INV.ADJ.', `cid`=?cid, `cqty`=@aqty, `date`=CURRENT_TIMESTAMP(), `notes`='STORE INVENTORY ADJUSTMENT', `area`='COUNTER', `sender`=@user, `receiver`=@user;";
    command.Parameters.AddWithValue("?cid", row.Cells["barcode"].Value);
    command.Parameters.AddWithValue("@aqty", row.Cells["aqty"].Value);
    command.Parameters.AddWithValue("@user", Properties.Settings.Default.user.ToUpper());
    command.ExecuteNonQuery();
    command.Parameters.Clear();
    

    我想这回答了OP.
    +1
    中的所有问题,当然找到了。谢谢!这肯定回答了我的问题+接得好。