【问题标题】:SQL LIKE search with multiple text boxes?使用多个文本框进行 SQL LIKE 搜索?
【发布时间】:2018-04-30 04:42:02
【问题描述】:

这是我的按钮的代码。

private void btnStudentLookup_Click(object sender, EventArgs e)
    {
        string strConnect = "Server=DESKTOP- 
        2Q73COU\\SQLEXPRESS;Database=LoginApp;Trusted_Connection=True;";
        SqlConnection conn = new SqlConnection(strConnect);
        conn.Open();
        using (SqlConnection studentLookup = new SqlConnection(strConnect))
        {
            SqlCommand command =
                new SqlCommand("SELECT * FROM Main_Information WHERE [First Name] like '%" + txtFirstName.Text + "%';", studentLookup);

            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            dgvAdvisor.DataSource = dt;
        }
    }

上面的一切都有效。它根据名字过滤掉行。但是,我想过滤掉更多,所以我将其添加到该行:

"SELECT * FROM Main_Information WHERE [First Name] like '%" + txtFirstName.Text + "%' OR [Last Name] like '%" + txtLastName.Text + "%';", studentLookup

现在它什么也没做。没有错误,没有例外,什么都没有。有什么建议吗?

【问题讨论】:

  • 哪个sql版本?
  • @maSTAShuFu 不太确定...我正在使用 SSMS
  • 直接从 SSMS 对数据库运行相同的查询,看看是否得到任何结果。调试代码,查看查询执行后数据表是否有行。
  • EMPRY 结果是完全合法的结果。您确定您的查询必须返回非空的内容吗?
  • 我太懒了,找不到合适/更好的方法,但是如果此查询适合您,您可以尝试使用 SSMS 吗? SELECT * FROM Main_Information WHERE [First Name] IN(SELECT [First Name] FROM Main_Information WHERE [First Name] LIKE '%replacetestvaluehere%') OR [Last Name] IN (SELECT [Last Name] FROM Main_Information WHERE [Last Name] LIKE '%replacetestvaluehere%').

标签: c# sql winforms


【解决方案1】:

如下更改查询:

SELECT * FROM Main_Information WHERE [First Name] like '%" + txtFirstName.Text + "%' AND [Last Name] like '%" + txtLastName.Text + "%';" , 学生查找

使用 AND 运算符而不是 OR。

【讨论】:

    【解决方案2】:

    在测试您的应用程序时,在 txtFirstName 文本框中写入:

    '; DELETE FROM Main_Information; --
    

    然后按“提交”按钮。

    如果一切正常,那么很好,如果没有,则使用SqlParameters 使用动态值构建查询

    using (var connection = new SqlConnection(connectionString))
    using (var command = connection.CreateCommand())
    {
        var query = @"
            SELECT * FROM Main_Information
            WHERE [First Name] LIKE @firstName AND [Last Name] LIKE @lastName";
        var parameters = new [] 
        {
            new SqlParameter
            {
                ParameterName = "@firstName",
                SqlDbType = SqlDbType.VarChar,
                Value = $"%{txtFirstName.Text}%"
            },
            new SqlParameter
            {
                ParameterName = "@lastName",
                SqlDbType = SqlDbType.VarChar,
                Value = $"%{txtLastName.Text}%"
            }
        }   
    
        command.CommandText = query;
        command.Parameters.AddRange(parameters);
    
        connection.Open();
    
        var adapter = new SqlDataAdapter(command);
        var data = new DataTable();
        adapter.Fill(data);
        dgvAdvisor.DataSource = data;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 2022-01-10
      • 2020-06-04
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多