【问题标题】:Search Database for rows, whose Column contains a specific string [Search-Query]在数据库中搜索行,其 Column 包含特定字符串 [Search-Query]
【发布时间】:2017-01-22 19:40:21
【问题描述】:

我想知道为什么这个 SQL 查询没有返回任何内容:

mySqlCommand.CommandText = "SELECT * FROM `users` WHERE Username LIKE %@Username% ORDER BY Id DESC";
mySqlCommand.Parameters.AddWithValue("@Username", this.search.Text);

这不是阅读器问题或类似问题,如果我删除“WHERE Username LIKE %@Username%”,它可以正常工作。 我在文本框的 KeyPress-Event 中调用了整个 MySQL-Query。 this.search 是文本框。我想搜索用户名列包含我在文本框中输入的字符的行。

【问题讨论】:

  • 如果您要查找特定字符串,请使用 = 而不是 LIKE
  • 另外,LIKE %@Username% 看到这是一个字符串,您需要将其视为一个字符串。
  • @Fred-ii- 我想检查用户名列是否包含字符串,= 不是我需要的
  • 第一个问题是为什么在 C# 中使用内联 SQL 而不是存储过程。接下来,您是在寻找更大字符串中的特定字符串,还是始终精确匹配?
  • 本问答可能对您有所帮助stackoverflow.com/q/16374840/1415724

标签: c# mysql


【解决方案1】:

尝试使用

//For LIKE query
SqlParameter parameter = new SqlParameter("@query", SqlDbType.NVarChar);
parameter.Value = string.Format("%{0}%", this.search.Text);
IList<Users> results = ctx.Database.SqlQuery<Users>("SELECT * FROM Users WHERE Username LIKE @query", parameter).ToList();

【讨论】:

  • 您确定您使用的是不带引号的@query 吗?它已经为我工作了一年多,如果您不使用 NVarChar,请重新验证 SqlDbType
  • 我不确定如何在 MySQL 中使用它,因为其中一些变量从未声明过,所以我尝试根据需要对其进行修改,但它没有用
  • 是的,这是真的,但这些变量在这种情况下不相关或无关紧要。顺便说一句,这些变量只是 DbContext 对象(实体框架)的引用,所以你可以忽略这些..
【解决方案2】:

我用这个解决了:

mySqlCommand.CommandText = "SELECT * FROM `users` WHERE Username LIKE @Username ORDER BY Id DESC";
mySqlCommand.Parameters.AddWithValue("@Username", "%" + this.search.Text + "%");

【讨论】:

    【解决方案3】:

    我强烈建议使用存储过程,这将有助于抵御 SQL 注入攻击,并且您希望禁止您的应用使用插入、更新和删除脚本,并且只允许它对存储过程使用执行语句。

    但是你想从

    改变这一行

    mySqlCommand.CommandText = "SELECT * FROMusersWHERE Username LIKE %@Username% ORDER BY Id DESC";

    mySqlCommand.CommandText = "SELECT * FROMusersWHERE Username LIKE '%@Username%' ORDER BY Id DESC";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多