Error al convertir de DBNull a Long

05/08/2004 - 21:08 por OSCAR | Informe spam
Hooola

A ver si me podeis ayudar...

En el If del dr.Read() me devuelve un NULL y me da error al
convertir al tipo Long. Si hay un registro en la base de
datos todo me va ok, pero si no hay ningún registro me peta
y me dice que Error al convertir del tipo DBNull al tipo
Long. Os paso el código, primero del stored procedure y
luego de la consulta...

-
CREATE PROCEDURE sp_obtenerIdArbol AS

select max(IdArbol_Ar) + 1 from Arboles
GO
-
Public Shared Function obtenerNumeroLicencia() As Long
Dim cn As New SqlConnection(cadenaConexión)
Dim cmd As New SqlCommand("sp_obtenerNumLic", cn)
Dim dr As SqlDataReader
Dim numLicencia As Long

Try

cn.Open()

cmd.CommandType = CommandType.StoredProcedure
dr = cmd.ExecuteReader

If dr.Read() Then

numLicencia = dr(0)
Else

numLicencia = 1
End If

Catch ex As Exception

Throw ex
Finally

dr.Close()
If cn.State = ConnectionState.Open Then

cn.Close()
End If
End Try

Return numLicencia
End Function
-

GRACIAS!!

nos vemos

adios adios

Preguntas similare

Leer las respuestas

#1 Cesar Rivera
05/08/2004 - 22:35 | Informe spam
Saludos :),

No pareciera que el código esté mal. Más bien parece que el DataReader trae
un registro cuyo valor es DBNull y es por eso que el dr.Read() funciona. En
tal caso te sugiero que pruebes lo siguiente:

If dr.Read() Then
numLicencia = IIF(IsDBNull(dr(0)),1,dr(0))
Else
numLicencia = 1
End If

o lo mismo:

If dr.Read() Then
If IsDBNull(dr(0)) Then
numLicencia = 1
Else
numLicencia = dr(0)
End If
Else
numLicencia = 1
End If



"OSCAR" wrote:

Hooola

A ver si me podeis ayudar...

En el If del dr.Read() me devuelve un NULL y me da error al
convertir al tipo Long. Si hay un registro en la base de
datos todo me va ok, pero si no hay ningún registro me peta
y me dice que Error al convertir del tipo DBNull al tipo
Long. Os paso el código, primero del stored procedure y
luego de la consulta...

-
CREATE PROCEDURE sp_obtenerIdArbol AS

select max(IdArbol_Ar) + 1 from Arboles
GO
-
Public Shared Function obtenerNumeroLicencia() As Long
Dim cn As New SqlConnection(cadenaConexión)
Dim cmd As New SqlCommand("sp_obtenerNumLic", cn)
Dim dr As SqlDataReader
Dim numLicencia As Long

Try

cn.Open()

cmd.CommandType = CommandType.StoredProcedure
dr = cmd.ExecuteReader

If dr.Read() Then

numLicencia = dr(0)
Else

numLicencia = 1
End If

Catch ex As Exception

Throw ex
Finally

dr.Close()
If cn.State = ConnectionState.Open Then

cn.Close()
End If
End Try

Return numLicencia
End Function
-

GRACIAS!!

nos vemos

adios adios

Respuesta Responder a este mensaje
#2 fernando
06/08/2004 - 08:45 | Informe spam
Hola, prueba con IsDBNull, seria asi:
If IsDbNull(dr.Item(0)) = false then
numLicencia = dr:Item(0)
Else
numLicencia = 1
End If
Espero te sirva

fernando
"OSCAR" escribió en el mensaje
news:0be301c47b1f$9aa4f100$
Hooola

A ver si me podeis ayudar...

En el If del dr.Read() me devuelve un NULL y me da error al
convertir al tipo Long. Si hay un registro en la base de
datos todo me va ok, pero si no hay ningún registro me peta
y me dice que Error al convertir del tipo DBNull al tipo
Long. Os paso el código, primero del stored procedure y
luego de la consulta...

-
CREATE PROCEDURE sp_obtenerIdArbol AS

select max(IdArbol_Ar) + 1 from Arboles
GO
-
Public Shared Function obtenerNumeroLicencia() As Long
Dim cn As New SqlConnection(cadenaConexión)
Dim cmd As New SqlCommand("sp_obtenerNumLic", cn)
Dim dr As SqlDataReader
Dim numLicencia As Long

Try

cn.Open()

cmd.CommandType = CommandType.StoredProcedure
dr = cmd.ExecuteReader

If dr.Read() Then

numLicencia = dr(0)
Else

numLicencia = 1
End If

Catch ex As Exception

Throw ex
Finally

dr.Close()
If cn.State = ConnectionState.Open Then

cn.Close()
End If
End Try

Return numLicencia
End Function
-

GRACIAS!!

nos vemos

adios adios
Respuesta Responder a este mensaje
#3 OSCAR
06/08/2004 - 10:47 | Informe spam
Hola Cesar,

Te agradezco tu respuesta, ya que gracias a ella me ha
funcionado!! El código que he utilizado ha sido el
siguiente:

If dr.Read() Then
If IsDBNull(dr(0)) Then
numLicencia = 1
Else
numLicencia = dr(0)
End If
Else
numLicencia = 1
End If

Bueno pues de nuevo gracias y hasta la próxima...

adios adios


Saludos :),

No pareciera que el código esté mal. Mà¡s bien parece


que el DataReader trae
un registro cuyo valor es DBNull y es por eso que el


dr.Read() funciona. En
tal caso te sugiero que pruebes lo siguiente:

If dr.Read() Then
numLicencia = IIF(IsDBNull(dr(0)),1,dr


(0))
Else
numLicencia = 1
End If

o lo mismo:

If dr.Read() Then
If IsDBNull(dr(0)) Then
numLicencia = 1
Else
numLicencia = dr(0)
End If
Else
numLicencia = 1
End If



"OSCAR" wrote:

Hooola

A ver si me podeis ayudar...

En el If del dr.Read() me devuelve un NULL y me da




error al
convertir al tipo Long. Si hay un registro en la base




de
datos todo me va ok, pero si no hay ningàºn registro




me peta
y me dice que Error al convertir del tipo DBNull al




tipo
Long. Os paso el código, primero del stored procedure




y
luego de la consulta...

-
CREATE PROCEDURE sp_obtenerIdArbol AS

select max(IdArbol_Ar) + 1 from Arboles
GO
-
Public Shared Function obtenerNumeroLicencia() As




Long
Dim cn As New SqlConnection(cadenaConexión)
Dim cmd As New SqlCommand("sp_obtenerNumLic",




cn)
Dim dr As SqlDataReader
Dim numLicencia As Long

Try

cn.Open()

cmd.CommandType =




CommandType.StoredProcedure
dr = cmd.ExecuteReader

If dr.Read() Then

numLicencia = dr(0)
Else

numLicencia = 1
End If

Catch ex As Exception

Throw ex
Finally

dr.Close()
If cn.State = ConnectionState.Open Then

cn.Close()
End If
End Try

Return numLicencia
End Function
-

GRACIAS!!

nos vemos

adios adios



.

Respuesta Responder a este mensaje
#4 OSCAR
06/08/2004 - 10:54 | Informe spam
Hola fernando,

Pues verás, no me ha servido :( Lo siento. Te explico pq
es muy curioso...

Si pongo el código que me has pasado y compilo y ejecuto
el programa, me peta y me dice que error de lectura...
Sin embargo si debugo el programa y le meto y breakpoint
en el If..., entonces si que me funciona. Raro, no??
Bueno de todas formas la respuesta del otro compañero sí
que me ha funcionado, así que la duda ya está resulta...

De todas formas, muuchas gracias por haberme respuesto.

adios adios



Hola, prueba con IsDBNull, seria asi:
If IsDbNull(dr.Item(0)) = false then
numLicencia = dr:Item(0)
Else
numLicencia = 1
End If
Espero te sirva

fernando
"OSCAR" escribió


en el mensaje
news:0be301c47b1f$9aa4f100$
Hooola

A ver si me podeis ayudar...

En el If del dr.Read() me devuelve un NULL y me da error


al
convertir al tipo Long. Si hay un registro en la base de
datos todo me va ok, pero si no hay ningún registro me


peta
y me dice que Error al convertir del tipo DBNull al tipo
Long. Os paso el código, primero del stored procedure y
luego de la consulta...

-
CREATE PROCEDURE sp_obtenerIdArbol AS

select max(IdArbol_Ar) + 1 from Arboles
GO
-
Public Shared Function obtenerNumeroLicencia() As


Long
Dim cn As New SqlConnection(cadenaConexión)
Dim cmd As New SqlCommand("sp_obtenerNumLic", cn)
Dim dr As SqlDataReader
Dim numLicencia As Long

Try

cn.Open()

cmd.CommandType = CommandType.StoredProcedure
dr = cmd.ExecuteReader

If dr.Read() Then

numLicencia = dr(0)
Else

numLicencia = 1
End If

Catch ex As Exception

Throw ex
Finally

dr.Close()
If cn.State = ConnectionState.Open Then

cn.Close()
End If
End Try

Return numLicencia
End Function
-

GRACIAS!!

nos vemos

adios adios


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida