Csharp/C#教程: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.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); 似乎工作(请注意名称中的@ )。

  1. 为什么所有这些都可以正常使用MySQL?

  2. 它们之间有区别吗?

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

感谢您提供的任何帮助。

从文档 :

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

看来这又改变了

从更新的文档连接器选项

旧语法,OldSyntax,使用旧语法,UseOldSyntax – Connector / Net 5.2.2中不推荐使用此选项。 现在应该使用’@’符号作为参数标记来编写所有代码。

也来自Creating a Connector .Net

使用参数的’@’符号现在是首选方法,尽管使用’?’的旧模式 仍然受支持。 要在将“@”符号与用户变量结合使用时避免冲突,请参阅第7章“连接器/网络连接字符串选项参考”中的“允许用户变量连接字符串”选项。 现在已弃用旧语法连接字符串选项。

@和? 都是在MySQL中标记参数的符号,你甚至可以像…一样使用它

上述就是C#学习教程:C#MySQL参数:? 要么 @分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 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(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/991913.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐