.net 为什么可以';vb无法捕获查询错误

.net 为什么可以';vb无法捕获查询错误,.net,vb.net,ms-access,.net,Vb.net,Ms Access,这是我当前的代码: Dim query As String = "SELECT * FROM tblPiglets WHERE Week=@week AND SowOrder=@so AND PigletNumber=@pig" Using cmd As New OleDbCommand(query, con) With cmd.Parameters .AddWithValue("@week", txtWeek.Text)

这是我当前的代码:

Dim query As String = "SELECT * FROM tblPiglets WHERE Week=@week AND SowOrder=@so AND PigletNumber=@pig"

    Using cmd As New OleDbCommand(query, con)
        With cmd.Parameters
            .AddWithValue("@week", txtWeek.Text)
            .AddWithValue("@so", txtSo.Text)
            .AddWithValue("@pig", txtPiglet.Text)
        End With
        Dim dr As OleDbDataReader = cmd.ExecuteReader()
        While dr.Read
            Dim loc As String
            loc = dr("CurrentLocation").ToString()
            If loc = ComboBox1.Text Then
                confirmed()
            Else
                invalid()
            End If
        End While
    End Using
第一个用户必须输入一个唯一的id,即周、sow订单和编号。然后它将检查所选项目的
CurrentLocation
字段是否与
ComboBox1.Text
相同。如果是,则继续,如果不是,则返回错误。
但是,当用户插入不存在的数据时,不会发生任何事情。比如说,我有3个数据(唯一的“id”)

  • 1-1-0
  • 1-1-1
  • 2-1-0

  • 如果我尝试输入2-1-1,这是不存在的,什么也不会发生。我想捕捉这一点,这样用户就会知道这是一个无效的输入。

    您需要自己检查是否有任何结果。对于SQL查询,如果不返回任何行,则不是错误。
    以下代码是此类检查的示例:

    Dim dr As OleDbDataReader = cmd.ExecuteReader()
    If dr.Read() Then
        Do 
           Dim loc As String
           loc = dr("CurrentLocation").ToString()
           If loc = ComboBox1.Text Then
               confirmed()
           Else
                invalid()
            End If
       Loop While dr.Read()
    Else
        ' Add code for no records here
    End If
    

    请注意,如果您想专门检查无效id,则需要添加一个特殊检查。上面的示例仅检查是否返回了任何行。原因还可能是没有周或订单的数据。

    添加一些代码检查dr是否为空

    If Not IsNothing(dr) Then
       While dr.read.... 
    
    Else
      'No records
    End If
    

    这很好,我只是想知道是否存在基于用户输入的数据。谢谢