高级搜索vb.net

时间:2017-01-02 13:00:03

标签: sql sql-server vb.net visual-studio

我有高级搜索,其中包含combobox1,combobox2,combobox3我搜索了一种在数据库中进行搜索的方法。 如果我选择了combobox1而没有选择combobox2和combobox3,如果我选择了combobox2而没有选择combobox1和combobox3也在combobox3中同样选择所有组合框我没有找到解决方案,我是否需要为每个案例制作更多的SqlCommand?或者有一种简单的方法,我尝试制作SqlCommand

 Public Sub Load_Main(ByVal projectid As Integer, ByVal pdocid As Integer, ByVal depid As Integer)
    main_Datatable.Clear()
    Dim cmd As New SqlCommand("select * from main where projectid=@projectid and pdocid=@pdocid and depid=@depid", DBConnection)

    cmd.Parameters.Add("projectid", SqlDbType.Int).Value = projectid
    cmd.Parameters.Add("pdocid", SqlDbType.Int).Value = pdocid
    cmd.Parameters.Add("depid", SqlDbType.Int).Value = depid
    DBConnection.Open()
    main_Datatable.Load(cmd.ExecuteReader)
    DBConnection.Close()
    cmd = Nothing

End Sub

Load_Main(project_combo.SelectedValue, doc_combo.SelectedValue, Depart_combo.SelectedValue)

但是,如果我没有选择其他组合框只是一个它不起作用

2 个答案:

答案 0 :(得分:0)

PackageAsSingleFile

如果将参数设置为null,则会有效地忽略该参数,因为它匹配每条记录。因为你的整数是以整数形式传入的,所以如果你想在SQL子句中忽略它,那么将它设置为0(或者一些永远不会被使用的其他整数值,如-1)。

您应该使用Using语句。

答案 1 :(得分:0)

这是一种方法,无需更改太多代码,假设0值表示组合框中未选择任何内容:

Public Sub Load_Main(ByVal projectid As Integer, ByVal pdocid As Integer, ByVal depid As Integer)
    main_Datatable.Clear()
    Dim query as string
    query = "select * " & _
            "from main " & _
            "where projectid = ISNULL(NULLIF(@projectid, 0), projectid) " & _
            "and pdocid = ISNULL(NULLIF(@pdocid, 0), pdocid) " & _
            "and depid = ISNULL(NULLIF(@depid, 0), depid) "
    Dim cmd As New SqlCommand(query, DBConnection)

    cmd.Parameters.Add("projectid", SqlDbType.Int).Value = projectid
    cmd.Parameters.Add("pdocid", SqlDbType.Int).Value = pdocid
    cmd.Parameters.Add("depid", SqlDbType.Int).Value = depid
    DBConnection.Open()
    main_Datatable.Load(cmd.ExecuteReader)
    DBConnection.Close()
    cmd = Nothing

End Sub