为什么vb不能捕获查询错误

时间:2014-02-04 09:03:21

标签: .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)
            .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,即周,母猪的顺序和编号。然后,它会检查所选项目的CurrentLocation字段是否与ComboBox1.Text相同。如果是,请继续,否则,错误 但是,当用户插入不存在的数据时,会发生 Nothing 。比如,我有3个数据(唯一“id”“)。

  1. 1-1-0
  2. 1-1-1
  3. 2-1-0
  4. 如果我尝试输入2-1-1,不存在,则没有任何反应。我想抓住这个,所以用户会知道它是无效的输入。

2 个答案:

答案 0 :(得分:3)

您需要自己检查是否有任何结果。对于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,则需要为此添加特殊检查。以上示例仅检查是否返回了任何行。原因也可能是周或没有数据。

答案 1 :(得分:0)

添加一些检查dr不为空的代码。

If Not IsNothing(dr) Then
   While dr.read.... 

Else
  'No records
End If