忽略空白文本框

时间:2019-04-25 05:55:45

标签: vb.net

我做了一个项目,目的是通过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)

1 个答案:

答案 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}},然后再次返回?