VB.Net忽略isDBNull条件

时间:2016-02-03 16:11:55

标签: vb.net visual-studio-2010 ms-access-2010 vb.net-2010

我正在编写狗收养表格。它从Access DB检索数据,然后用户可以采用最多三只狗,每只狗在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)是否为空,如果是,则将狗的名字放在那里。如果不是,请检查下一个空闲时段。如果没有,请打印相应的错误消息。但是程序的作用是覆盖adopcion1(第一个字段),无论如何。

我已经检查了this帖子,我可能会遇到类似的问题,误解了isDBNull的用法,但到目前为止,我试图按照它所说的那样做,没有结果。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

If dr.isDBNull(0) Then
  posicionAdopcion = 1

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

感谢您的帮助!