【问题标题】:c# sql "like" operation [closed]c# sql "like" 操作 [关闭]
【发布时间】:2018-05-15 19:55:36
【问题描述】:

如何将 "@something" 替换为 "textBox2.Text" ,以便 sql 可以搜索包含它的内容?这不起作用。

private void cmd1_Click(object sender, EventArgs e)
{
    string content = null;
    FbConnection conn = new FbConnection(connectionString);
    conn.Open();
    FbCommand command = conn.CreateCommand();

    command.CommandText = @"select a.NAME, a.SCHOOL, a.CLASS
    from PEOPLE a, PLACES b
    where 
    b.KEY=a.PLACE and          
    a.SCHOOL like '%@something%'
    order by a.NAME";

    command.Parameters.AddWithValue("@something", textBox2.Text);
    FbDataReader reader = command.ExecuteReader();

    while (reader.Read())
    {
        content += (string)reader["NAME"] + "\r\n";
        textBox1.Text = content;
    }
}

【问题讨论】:

  • 请不要添加代码图片,它们绝对不会为您的问题增加任何价值。
  • 你需要学习如何创建连接字符串以及如何使用LIKE语句你LIKE "%" + value + "%"
  • 另一种选择是在查询中执行'%' + @something + '%'
  • @juharr 绝对......这也是我要评论/建议的内容

标签: c# sql sql-like


【解决方案1】:

通过在 SQL 语句中将 @something 括在单引号中,您可以告诉数据库将其视为直接字符串值,以便搜索将记录与实际的“%@something%”字符串匹配 - 使用逻辑当然,对于“%”部分。

a.SCHOOL like @something

...

command.Parameters.AddWithValue("@something", "%" + textBox2.Text + "%");

【讨论】:

  • 本网站不鼓励仅使用代码回答。 13.2k 信誉用户不知道这一点有点奇怪
  • @CamiloTerevinto 不鼓励使用不解释任何内容的代码答案。不言自明的代码答案是可以的。这个答案是否不言自明是有争议的,但就我个人而言,我倾向于是的。
  • @hvd 这不是不言自明的。答案和问题之间的参数传递方式存在差异,这实际上解决了问题,应该解释一下。
  • @CamiloTerevinto 这是一个合法的观点。我不同意的原因(再说一遍,我并不是说这绝对是不言自明的)是因为答案被剥夺了与少数更改无关的任何内容,并且仅通过查看这些少数更改,我感觉到了那些的原因对于任何阅读它的人来说,变化是或应该立即显而易见的。无论如何,我希望我们都能同意,通过编辑,这是一个很好的答案,并且比以前更好:)
【解决方案2】:

或者使用这个解决方案。

command.CommandText = @"select a.NAME, a.SCHOOL, a.CLASS
from PEOPLE a, PLACES b
where 
b.KEY=a.PLACE and          
a.SCHOOL like '%' || @something || '%'
order by a.NAME";

command.Parameters.AddWithValue("@something", textBox2.Text);

就像 igor 说的 %@something% 是一个字符串。您可以在 SQL 查询中将 @something 设置为“变量”并在其前后连接 %

更新:首先使用+(Microsoft SQL Server)连接它,但@hvd 说firebird 使用||。所以我改了。

【讨论】:

  • “其他人使用SQL注入” - @Igor的回答没有,其他的已经被删除了
  • 我知道我确实错了。会尽快回复。
  • @RufusL 好点。在 Microsoft SQL Server 中,+ 用于字符串连接,这个答案确实需要字符串连接,但 OP 使用 FbConnection 建议使用 Firebird,为此使用 ||
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2021-07-18
相关资源
最近更新 更多