Sql 搜索10个字段

Sql 搜索10个字段,sql,vb.net,Sql,Vb.net,我有10个需要搜索的字段。它由10个文本框组成,每个文本框在数据库中都有自己指定的需要搜索的列。它有一个搜索按钮。我的问题是,我无法控制这些框中的哪些将由用户填充。因此,我需要动态检查字段是否为空。随附的是我的示例代码。我希望你们能给我一个更简单的方法 文本框: 1.注册日期 2.链接代码 3.建筑规范 4.建筑物描述 5.街道描述 6.乡村描述 7.面积描述 8.地区描述 9状态描述 10国家描述 在下面的“功能项”下的示例代码中: 参数actDate=文本框注册日期 参数linkCode=文

我有10个需要搜索的字段。它由10个文本框组成,每个文本框在数据库中都有自己指定的需要搜索的列。它有一个搜索按钮。我的问题是,我无法控制这些框中的哪些将由用户填充。因此,我需要动态检查字段是否为空。随附的是我的示例代码。我希望你们能给我一个更简单的方法

文本框: 1.注册日期 2.链接代码 3.建筑规范 4.建筑物描述 5.街道描述 6.乡村描述 7.面积描述 8.地区描述 9状态描述 10国家描述

在下面的“功能项”下的示例代码中: 参数actDate=文本框注册日期 参数linkCode=文本框链接代码 参数bldgCode=文本框Bldg Code 参数bldgDesc=文本框Bldg Desc

到目前为止,我只在代码中添加了4个文本框。我停下来是因为我想知道是否有更简单的方法来实现这一点。。谢谢

 Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click

    accountDt = New DataTable
    accountDt = Items(txtActDate.Text, txtLinkCode.Text, txtBldgCode.Text, txtBldgDesc.Text, "select * from ac_account", "ACTIVATION_DATE_D")
    LoadData(btnCheckAll, btnUnCheckAll, btnAccountWrite, btnAccountFirst, btnAccountPrevious, btnAccountNext, btnAccountLast, _
             lblAccountPage, lstAccount, "ACCOUNT_NAME_V", "ACTIVATION_DATE_D", "ACTIVATED_BY_N", accountDt, "ACSP_AccountLoad", _
             "ACTIVATION_DATE_D", btnMatrix)
    txtActDate.Text = ""
    txtLinkCode.Text = ""
    txtBldgCode.Text = ""
    txtBldgDesc.Text = ""
端接头

Public Function Items(ByVal actDate As String, ByVal linkCode As String, ByVal bldgCode As String, ByVal bldgDesc As String, ByVal query As String, _
                     ByVal actRegDate As String) As DataTable
    Try
        If actDate <> "" And linkCode <> "" And bldgCode <> "" And bldgDesc <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_CODE_V = '" & bldgCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf actDate <> "" And linkCode <> "" And bldgCode <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_CODE_V = '" & bldgCode & "'"
        ElseIf actDate <> "" And linkCode <> "" And bldgDesc <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf actDate <> "" And bldgCode <> "" And bldgDesc <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and BUILDING_CODE_V = '" & bldgCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf linkCode <> "" And bldgCode <> "" And bldgDesc <> "" Then
            query = query & " where ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_CODE_V = '" & bldgCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf actDate <> "" And linkCode <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and ACCOUNT_LINK_CODE_N = '" & linkCode & "'"
        ElseIf actDate <> "" And bldgCode <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and BUILDING_CODE_V = '" & bldgCode & "'"
        ElseIf actDate <> "" And bldgDesc <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf linkCode <> "" And bldgCode <> "" Then
            query = query & " where ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_CODE_V = '" & bldgCode & "'"
        ElseIf linkCode <> "" And bldgDesc <> "" Then
            query = query & " where ACCOUNT_LINK_CODE_N = '" & linkCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf bldgCode <> "" And bldgDesc <> "" Then
            query = query & " where BUILDING_CODE_V = '" & bldgCode & "' and BUILDING_DESC_V = '" & bldgDesc & "'"
        ElseIf actDate <> "" Then
            query = query & " where convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "'"
        ElseIf linkCode <> "" Then
            query = query & " where ACCOUNT_LINK_CODE_N = '" & linkCode & "'"
        ElseIf bldgCode.ToLower <> "" Then
            query = query & " where BUILDING_CODE_V = '" & bldgCode & "'"
        ElseIf bldgDesc.ToLower <> "" Then
            query = query & " where BUILDING_DESC_V LIKE '" & bldgDesc & "%" & "'"
        End If
        conn.Open()
        sqlCmd = New SqlCommand(query, conn)
        sqlCmd.CommandType = CommandType.Text
        sqlDt = New DataTable
        sqlDa = New SqlDataAdapter(sqlCmd)
        sqlDa.Fill(sqlDt)
        conn.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
        If conn.State = ConnectionState.Open Then
            conn.Close()
        End If
    End Try
    Return sqlDt
End Function
公共函数项(ByVal actDate作为字符串,ByVal linkCode作为字符串,ByVal bldgCode作为字符串,ByVal bldgDesc作为字符串,ByVal query作为字符串_
ByVal actRegDate(作为字符串)作为数据表
尝试
如果actDate“”和linkCode“”以及bldgCode“”和bldgDesc“”,则
query=query&“where convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和ACCOUNT\u LINK\u CODE\u N=”&linkCode&“和BUILDING\u CODE\u V=””&bldgCode&“和BUILDING\u DESC\u V=”&bldgddesc&“”
如果actDate“”和linkCode“”以及bldgCode“”,则
query=query&“where convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和ACCOUNT\u LINK\u CODE\u N=”&linkCode&“和BUILDING\u CODE\u V=”&bldgCode&“”
如果actDate“”和linkCode“”以及bldgDesc“”,则
query=query&“where convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和ACCOUNT\u LINK\u CODE\u N=”&linkCode&“and BUILDING\u DESC\u V=”&bldgDesc&“”
ElseIf actDate“”和bldgCode“”以及bldgDesc“”,然后
query=query&“where convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和BUILDING_CODE_V=”&bldgCode&“和BUILDING_DESC_V=””&bldgddesc&“”
ElseIf链接代码“”和bldgCode“”以及bldgDesc“”,然后
query=query&“where ACCOUNT_LINK_CODE_N=”&linkCode&“and BUILDING_CODE_V=”&bldgCode&“and BUILDING_DESC_V=”&bldgddesc&“”
如果actDate“”和linkCode“”则
query=query&“其中convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和ACCOUNT\u LINK\u CODE\u N=”&linkCode&“”
如果actDate为“”,bldgCode为“”,则
query=query&“where convert(varchar(10),”&actRegDate&“,101)='”&actDate&“and BUILDING_CODE_V=”&bldgCode&“”
如果是actDate“”和bldgDesc“”,则
query=query&“where convert(varchar(10),”&actRegDate&“,”101)=“&actDate&”和BUILDING_DESC_V=”&bldgddesc&“”
ElseIf链接代码“”和bldgCode“”,然后
query=query&“where ACCOUNT_LINK_CODE_N=”&linkCode&“and BUILDING_CODE_V=”&bldgCode&“”
ElseIf链接代码“”和bldgDesc“”,然后
query=query&“where ACCOUNT_LINK_CODE_N=”&linkCode&“and BUILDING_DESC_V=”&bldgDesc&“”
ElseIf bldgCode“”和bldgDesc“”,然后
query=query&“where BUILDING_CODE_V=”&bldgCode&“and BUILDING_DESC_V=”&bldgddesc&“”
如果是“生效日期”,则
query=query&“其中convert(varchar(10),”&actRegDate&“,101)='”&actDate&'”
如果链接代码为“”,则
query=query&“where ACCOUNT\u LINK\u CODE\u N=”&linkCode&“
ElseIf bldgCode.ToLower“”则
query=query&“where BUILDING_CODE_V=”&bldgCode&“
ElseIf bldgDesc.ToLower“那么
query=query&“where BUILDING_DESC_V LIKE'”和bldgddesc&“%”和“%”
如果结束
康涅狄格州公开赛
sqlCmd=新的SqlCommand(查询,连接)
sqlCmd.CommandType=CommandType.Text
sqlDt=新数据表
sqlDa=新的SqlDataAdapter(sqlCmd)
sqlDa.Fill(sqlDt)
康涅狄格州关闭
特例
MsgBox(例如消息)
如果连接状态=连接状态打开,则
康涅狄格州关闭
如果结束
结束尝试
返回sqlDt
端函数
我们这样做(不幸的是,这是c#,但.NET调用会转换):

List短语=新列表();
if(actDate!=“”)短语。添加(“convert(varchar(10),actRegDate,101)='”+actDate.ToShortDateString()+”;
如果(链接代码!=“”)短语。添加“(帐户链接代码+链接代码+”);
继续将短语添加到
列表中
。完成后,可以使用
字符串创建
WHERE
子句。Join

String whereClause=String.Join(“AND”,短语)

然后可以在SQL中使用它

一次警告:我强烈建议使用参数,而不是将值直接连接到短语中。过去我这样做时,我只是将所有参数添加到
SqlCommand
,无论它们是否在实际查询中


但是,如果LINQ2SQL是一个选项,它将为您执行所有这些操作,包括查询组合。

对于每个非空搜索框,您应该向WHERE添加另一个条件。如果您不想跟踪是否已添加条件,请添加1=1开始。每个搜索框添加一个if

query = query & "WHERE 1=1 "
IF actDate <> "" THEN 
  query = query & " AND convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "'"
END IF
IF bldgCode <> "" THEN 
   query = query & " and BUILDING_CODE_V = '" & bldgCode & "'"
END IF
query=query&“其中1=1”
如果日期为“”,则
query=query&“并转换(varchar(10),”&actRegDate&“,101)='&actDate&''
如果结束
如果bldgCode为“”,则
query=query&“and BUILDING_CODE_V=”&bldgCode&“
如果结束
query = query & "WHERE 1=1 "
IF actDate <> "" THEN 
  query = query & " AND convert(varchar(10)," & actRegDate & ",101) = '" & actDate & "'"
END IF
IF bldgCode <> "" THEN 
   query = query & " and BUILDING_CODE_V = '" & bldgCode & "'"
END IF