MySqlCommand、MySqlParameter 和带有百分号的 "LIKE"





5.00/5 (1投票)
如何在 MySQL .NET / 连接器中使用 MySQLParameter 进行带有 LIKE 的文本搜索
引言
在使用 GetSqlStringCommand
进行文本比较时,在 ADO.NET 中使用 LIKE
,并且使用 MySqlParamenter
时,通过 MySQL 客户端手动执行命令和通过 ADO.NET 执行命令的结果会不同。
背景
当您编写如下命令时,会发生这种情况:"SELECT * FROM users WHERE name LIKE '%John%'
",这将返回
John Frank
Johnny Philips
H. F. John
但是对于 ADO.NET,如果您设置一个 var
,例如 "@name
",并像这样更新命令 "SELECT * FROM users WHERE name LIKE '%@name%'
",ADO.NET 会将其视为字符串 '@name
',您将返回 0 个结果,因为不存在名为 @name
或电子邮件为 @name
的用户,但存在电子邮件域名为 "name.com" 的用户,例如 alberto@name.com,但这是一种巧合,而不是我们期望的结果。
因此,您需要删除单引号,并在前后附加 "%
" 来设置值。
Using the Code
//Wrong way
MySqlCommand cmd = oldDb.GetSqlStringCommand(CommandType.Text,"SELECT * _
FROM users WHERE name LIKE '%@name%'");
MySqlParameter nameParameter= cmd.CreateParameter();
nameParameter.DbType = DbType.String;
nameParameter.ParameterName = "@name";
nameParameter.Value = "John";
//Good way
MySqlCommand cmd = oldDb.GetSqlStringCommand(CommandType.Text,"SELECT * _
FROM users WHERE name LIKE @searchText");
MySqlParameter nameParameter= cmd.CreateParameter();
nameParameter.DbType = DbType.String;
nameParameter.ParameterName = "@searchText"
nameParameter.Value = "%John%";