组合查询时需要理清三个组合内容在查询时是否起到了作用。
查询时判断查询内容是否为空:
Private Sub btnQuery_Click(sender As Object, e As EventArgs) Handles btnQuery.Click
dgvGroupCheck.DataSource = ""
'判断组合框不为空
If cmbRelations1.Text = "" Then '如果第一个组合关系框为空
If cmbField1.Text = "" Or cmbOperator1.Text = "" Or txt1 = "" Then
MsgBox("第一行查询条件不能为空!", , "提示")
Exit Sub
End If
End If
If cmbRelations1.Text <> "" Then '如果选择了第一个组合关系
If cmbField2.Text = "" Or cmbOperator2.Text = "" Or txt2 = "" Then
MsgBox("第二行查询条件不能为空!", , "提示")
Exit Sub
If cmbRelations2.Text <> "" Then '选择了第一个组合关系后,又选择了第二个组合关系
If cmbField3.Text = "" Or cmbField3.Text = "" Or txt3 = "" Then
MsgBox("第三行查询条件不能为空", , "提示")
Exit Sub
End If
End If
End If
Else
If cmbRelations1.Text = "" And cmbRelations2.Text <> "" Then '只选择了第二个组合关系
cmbField3.Text = "" Or cmbField3.Text = "" Or txt3 = "" Then
MsgBox("第三行查询条件不能为空", , "提示")
Exit Sub
End If
End If
End If
数据库存储过程实现:
在数据库存储时通过字符串上的叠加来连接成数据库查询语句。
ALTER PROCEDURE [dbo].[GroupQuery]
-- Add the parameters for the stored procedure here
@cmbField1 varchar(20),
@cmbOperator1 varchar(20),
@txtContent1 varchar(20),
@cmbField2 varchar(20),
@cmbOperator2 varchar(20),
@txtContent2 varchar(20),
@cmbField3 varchar(20),
@cmbOperator3 varchar(20),
@txtContent3 varchar(20),
@cmbRelations1 varchar(20),
@cmbRelations2 varchar(20),
@tableName varchar(20)
AS
declare @TempSql varchar(500)
BEGIN
SET @TempSql='SELECT * FROM '+@tableName +' WHERE ' +@cmbField1 +@cmbOperator1+char(39) + @txtContent1 + char(39)
IF (@cmbRelations1='')
BEGIN
if (@cmbRelations2!='')
BEGIN
SET @TempSql=@TempSql+@cmbRelations2+CHAR(32)+@cmbField3+@cmbOperator3+CHAR(39)+@txtContent3+CHAR(39)
END
END
IF (@cmbRelations1!='')
BEGIN
SET @TempSql=@TempSql+@cmbRelations1+CHAR(32)+@cmbField2 +@cmbOperator2+CHAR(39)+@txtContent2+CHAR(39)
if (@cmbRelations2!='')
BEGIN
SET @TempSql=@TempSql+@cmbRelations2+CHAR(32)+@cmbField3+@cmbOperator3+CHAR(39)+@txtContent3+CHAR(39)
END
END
EXECUTE(@TempSql)
END