我做了一个项目,目的是通过vb.net从数据库中选择数据 我有1个文本框,2个组合框和2个日期字段 我想在搜索中进行and操作 我生成了代码,但是没有按要求工作 仅当我在所有5个字段中输入值时,它才起作用 如果任何字段留空,则代码将其视为一个值,并且不显示任何数据 我要进行和操作,如果我离开了其中一个字段 空白,系统会在代码中将其忽略
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim x1 As String
Dim x2 As String
Dim x3 As String
Dim x4 As Date
Dim x5 As Date
x1 = CInt(TextBox1.Text)
x2 = CStr(ComboBox1.Text)
x3 = CStr(ComboBox2.Text)
x4 = DateTimePicker1.Value
x5 = DateTimePicker2.Value
UtilizationTableAdapter.Fill(WINCC_DATADataSet.Utilization, x1, x2, x3, x4, x5)
End Sub
对于表适配器中的填充代码,就像这样
SELECT ID, Cast_number, Stoppage, Downtime, Departement, Reason, Note, Eventtime
FROM Utilization
WHERE (Cast_number = @Cast_number) and (Stoppage = @Stoppage) and (Departement = @Departement) and (Eventtime > @Eventtime) AND (Eventtime < @Eventtime1)
答案 0 :(得分:0)
您需要更改SQL以忽略空输入,例如
SELECT *
FROM MyTable
WHERE (@Column1 IS NULL OR Column1 = @Column1)
AND (@Column2 IS NULL OR Column2 = @Column2)
然后,您编写VB代码以在适当的地方传递空值。使用直接的ADO.NET,这意味着使用DBNull.Value
。对于类型为DataSet
的情况,这意味着使用Nothing
:
x1 = If(TextBox1.TextLength = 0, CStr(Nothing), TextBox1.Text)
x2 = If(ComboBox1.SelectedItem Is Nothing, CStr(Nothing), ComboBox1.Text)
x3 = If(ComboBox2.SelectedItem Is Nothing, CStr(Nothing), ComboBox2.Text)
x4 = DateTimePicker1.Value
x5 = DateTimePicker2.Value
UtilizationTableAdapter.Fill(WINCC_DATADataSet.Utilization, x1, x2, x3, x4, x5)
我忽略了您为Integer
变量分配一个x1
的事实,该变量被声明为类型String
,这没有任何意义。如果Fill
方法期望使用Integer
,则变量应为Integer
,如果变量期望使用String
,那么为什么要将已经String
的变量转换为{ {1}},然后再次返回?