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