VB.Net 忽略 isDBNull 条件

VB.Net ignores isDBNull condition

我正在编写狗领养表格。它从 Access 数据库中检索数据,然后用户最多可以收养三只狗,每只狗在 3 个不同的字段中指定。我这样做是因为我以前尝试用数组来做,但没有成功。

问题来了(以粗体突出显示):

Try
        Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\PerrosDB.mdb;")
        conexion.Open()

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = conexion
        cmd.CommandType = CommandType.Text
        cmd.CommandText = "select adopcion1, adopcion2, adopcion3 from usuarios where codigo_usuario = " & FormPrincipal.codigo_usuario & ""
        Dim dr As OleDb.OleDbDataReader
        dr = cmd.ExecuteReader

        While dr.Read()

            **If dr.IsDBNull(1) Then
                posicionAdopcion = 1
            ElseIf dr.IsDBNull(2) Then
                posicionAdopcion = 2
            ElseIf dr.IsDBNull(3) Then
                posicionAdopcion = 3
            Else
                MsgBox("Lo sentimos, solo puedes hacer un máximo de 3 adopciones")
                Exit Sub**
            End If

        End While

        dr.Close()

        conexion.Close()
    Catch ex As Exception
        MsgBox(ex.Message & "Saliendo de la aplicación.")
        Me.Close()
    End Try

 Try

        Dim conexion As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\PerrosDB.mdb;")
        conexion.Open()

        Dim cmd As New OleDb.OleDbCommand
        cmd.Connection = conexion
        cmd.CommandType = CommandType.Text

        **If (posicionAdopcion = 1) Then
            cmd.CommandText = "UPDATE USUARIOS SET ADOPCION1 = '" & nombrePerro & "' WHERE codigo_usuario = " & FormPrincipal.codigo_usuario & ""
        ElseIf (posicionAdopcion = 2) Then
            cmd.CommandText = "UPDATE USUARIOS SET ADOPCION2 = '" & nombrePerro & "' WHERE codigo_usuario = " & FormPrincipal.codigo_usuario & ""
        ElseIf (posicionAdopcion = 3) Then
            cmd.CommandText = "UPDATE USUARIOS SET ADOPCION3 = '" & nombrePerro & "' WHERE codigo_usuario = " & FormPrincipal.codigo_usuario & ""
        End If**

        cmd.ExecuteNonQuery()
        conexion.Close()

    Catch ex As Exception
        MsgBox(ex.Message & "Saliendo de la aplicación...")
        Me.Close()

    End Try

我想做的是检查收养字段(adopcion1、adopcion2、adopcion3)是否为空,如果是,请将狗的名字放在那里。如果不是,请检查下一个空闲插槽。如果 none 可用,打印相应的错误信息。但是程序所做的是无论如何都覆盖adopcion1(第一个字段)。

我已经检查了 this 线程,我可能有类似的问题,误解了 isDBNull 的用法,但到目前为止,我正在尝试按照那里的说明进行操作,但没有结果。

我做错了什么?

我明白了,正如我所料,这是一个愚蠢的错误:我从 1 中检索第一个数据字段,而不是从 0 中检索。因此完全跳过它:

If dr.isDBNull(0) Then
  posicionAdopcion = 1

但是,是的,代码看起来很笨拙,不知道 SQL 参数,将尽快检查它们。

感谢您的帮助!