【问题标题】:Creating a parametrised, MySQL query with wildcards使用通配符创建参数化的 MySQL 查询
【发布时间】:2014-04-23 06:29:01
【问题描述】:

我想使用基于参数的查询来填充数据网格。但是,我希望能够输入可能包含通配符的多个参数。但是,以下测试查询不正确。

任何想法我哪里出错了?

SELECT `Customer ID`, `Company Name`, `Address Line 3` FROM XTest.all WHERE `Company Name` LIKE '%'+@Company+'%' ORDER BY `Company Name`;

【问题讨论】:

  • 参数可能包含通配符是什么意思?
  • 我想查找字段中包含“A”的所有内容,因此您通常会执行 LIKE %a% - 但此查询使用参数。
  • 使用参数是什么意思?
  • 与只接受字符串相比,这是一种运行查询的更安全的方式。例如,如果字符串包含“ - 它可能会引发错误。
  • 好的。你说的是Prepared Statements。

标签: c# mysql


【解决方案1】:
string company = "%" + your_criteria_on_company + "%";

string sql = "SELECT 
                `Customer ID`, `Company Name`, `Address Line 3` 
              FROM XTest.all 
              WHERE 
                `Company Name` LIKE @Company 
              ORDER BY `Company Name`";

SqlCommand sqlCommand = new SqlCommand( sql, dbConnection );
sqlCommand.Parameters.AddWithValue( "@Company", company );

' add more of your code here
' and then
sqlCommand.Prepare();
MySqlDataReader resultSet = sqlCommand.ExecuteReader();

参考

【讨论】:

    【解决方案2】:

    需要用""双引号将列名括起来(取决于SQL Mode的设置)。

    请检查此链接并按照@DRapp 的回答。 这是链接:mysql parameterized query in ASP.NET

    根据答案,您需要使用? 而不是@

    试试这个:

    SELECT `Customer ID`, `Company Name`, `Address Line 3` 
            FROM XTest.all 
            WHERE `Company Name` LIKE  concat('%',? + "Company",'%') 
            ORDER BY `Company Name`;
    
    objCommand.Parameters.AddWithValue("?Company", "CompanyValue");
    

    【讨论】:

    • 对不起,不适用于mysql。
    • 感谢 Hassan 的努力(非常感谢)
    • 真的很抱歉 - 但还是不明白。如果您可以将您的解决方案应用于查询,我们将不胜感激。谢谢(再次)。
    • @HassanNisar: @ 成为变量的一部分并不是错误。
    • 非常感谢 - 这是一个真正的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多