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 参数,将尽快检查它们。
感谢您的帮助!
我正在编写狗领养表格。它从 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 参数,将尽快检查它们。
感谢您的帮助!