如何从具有多个语句的数据集中进行搜索

问题描述 投票:0回答:1

如何使用多个语句或条件从数据集中搜索数据。到目前为止,这是我当前的代码。基本上我想要发生的是,我想搜索数据甚至某些控件(例如文本框,组合框为空)。

示例1:(日期1和日期2之间)和check_corporate =“某事” 示例2: (check_group="something") 和 (check_name Like '%" & txt_searchReports.Text & "%') 和 check_corporate="something"

Sub loadReports()
    da = New MySql.Data.MySqlClient.MySqlDataAdapter("select * from tblchecklist where check_group ='" & combo_groupReports.Text & "' order by check_date asc", conn)
    ds = New DataSet
    da.Fill(ds, "tblchecklist")
    dgv_reports.DataSource = (ds.Tables("tblchecklist"))
End Sub

Sub searchReports()
    Dim date1 As String = dateFrom.Value.ToString("yyyy-MM-dd")
    Dim date2 As String = dateTo.Value.ToString("yyyy-MM-dd")

    da = New MySql.Data.MySqlClient.MySqlDataAdapter("select * from tblchecklist  WHERE (check_date between '" & date1 & "' and '" & date2 & "')" _
                                                       & "and (check_corporate = '" & combo_corpReports.Text & "'" _
                                                       & "and check_group = '" & combo_groupReports.Text & "'" _
                                                       & "and check_name Like '%" & txt_searchReports.Text & "%' or check_num like '%" & txt_searchReports.Text & "%')", conn)


    ds = New DataSet
    da.Fill(ds, "tblchecklist")
    dgv_reports.DataSource = (ds.Tables("tblchecklist"))
End Sub

Private Sub txt_searchReports_TextChanged(sender As Object, e As EventArgs) Handles txt_searchReports.TextChanged
    searchReports()
End Sub
sql vb.net
1个回答
0
投票

如果您想使用带有可为空参数的单个 SQL 语句,那么技巧是每个参数使用两个条件,例如

Dim sql = "SELECT * FROM MyTable WHERE (@Columnn1 IS NULL OR Column1 = @Column1)"
Dim adapter As New SqlDataAdapter(sql, connectionString)

With adapter.SelectCommand.Parameters
    .Add("@Column1", SqlDbType.VarChar, 50).Value = If(TextBox1.TextLength = 0, CObj(DBNull.Value), TextBox1.Text)
    'etc
End With

如果

TextBox
为空,则参数为
NULL
并且每个记录都匹配,就好像没有参数一样,否则提供的文本将用作过滤器。您可以将任意多对这样的条件
AND
组合在一起。

我在那里使用了

SqlClient
SQL Server,但无论数据库或提供商如何,原理都是相同的。一些细节将会改变,例如
MySqlDataAdapter
MySqlDbType
,但图案不会改变。某些数据库和提供程序不正确支持命名参数,例如Access,因此不能在 SQL 代码中使用相同的参数两次,因此必须为每个值添加两个参数。不过 MySQL 应该没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.