我有高级搜索,其中包含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)
但是,如果我没有选择其他组合框只是一个它不起作用
答案 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