Error en visual basic

Tengo el siguiente error y me esta quebrando la cabeza porque no he podido solucionarlo.. ¿Me echas una mano?
El error es este:
System. InvalidCastException: La conversión del tipo 'DBNull' en el tipo 'Integer' no es válida. En Microsoft. Visual basic. CompilerServices. Conversions. ToInteger(Object Value)

2 respuestas

Respuesta
1
Ponle así:
Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(Object Value.ToString())
Perdona por favor mi ignorancia, ¿me puedes decir en que parte lo debo colocar?
Muchas gracias.
Cambialo por la linea que te da error pues mi estimado. La linea es la misma, solo le puse ToString() después de Value.
Hola..
Gracias por la respuesta.
Esa linea solo parece cuando sale el error pero no la tengo en la aplicación como tal, ¿qué puedo hacer?
¿Cuál es entonces la linea?
Hola..
Te voy a pegar un pantallazo de lo que tengo y así ver con más claridad donde se encuentra el error.
Mil gracias
Ok, pero asegurate que se vea la linea del error.
Hola...
Lleve mi aplicación a otro pc y me sale ahora este error, creo que ya me habías dicho algo al respecto pero no me funciono porque no lo entendí muy bien.
.. Solo me falta esto para poder terminar la aplicación.
Este es el error:
System.Data.OleDb.OleDbException: La tabla externa no tiene el formato esperado. en System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) en System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) en System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) en System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) en System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) en System.Data.OleDb.OleDbConnection.Open() en proyecto.guia.btnRealizarCarga_Click(Object sender, EventArgs e) en C:\Users\Jose Ignacio\Desktop\Proyecto Alfa\Projects\proyecto\proyecto\guia.aspx.vb:línea 72
Y esto es el código de la carga, creo que puede estar mala la conexión al excel pero no encuentro como solucionarlo:
Protected Sub btnRealizarCarga_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRealizarCarga.Click
Try
Dim datos As New datos
Dim NumeroGuia As Integer
Dim CodigoDest As Integer
Dim cantidad As Integer
Dim CodigoProd As Integer
Dim estado As String
Dim codigoMens As Integer
Dim MiConexion As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties = 'Excel 8.0'; Data Source=C:\Users\Jose Ignacio\Desktop\pruebilla.xlsx")
Dim MiAdaptador As New OleDbDataAdapter("SELECT * FROM [Hoja1$]", MiConexion)
Dim dt As New DataTable
Dim commandbuilder As New OleDb.OleDbCommandBuilder(MiAdaptador)
MiConexion.Open()
MiAdaptador.Fill(dt)
MiConexion.Close()
If ValidarXls(dt) = True Then
'Rows = Fila
'Item = Columna
Dim i As Integer
For i = 0 To dt.Rows.Count - 1
NumeroGuia = dt.Rows(i).Item(0)
CodigoDest = dt.Rows(i).Item(1)
cantidad = dt.Rows(i).Item(2)
CodigoProd = dt.Rows(i).Item(3)
estado = dt.Rows(i).Item(4)
codigoMens = dt.Rows(i).Item(5)
If datos.Crearguia(NumeroGuia, CodigoDest, cantidad, CodigoProd, estado, codigoMens) = False Then
lblMensaje.Text = "Ha ocurrido un error al momento de guardar los registros"
Exit Sub
End If
Next
lblMensaje.Text = "Carga masiva de Usuarios realizada con Exito!!!!!"
Else
lblMensaje.Text = "ha ocurrido un error al momento de validar el Excel"
End If
Catch ex As Exception
lblMensaje.Text = ex.ToString
End Try
End Sub
Y esta es la funcion :
Function Crearguia(ByVal NumeroGuia As Integer, ByVal CodigoDest As Integer, ByVal cantidad As Integer, ByVal CodigoProd As Integer, ByVal estado As String, ByVal codigoMens As Integer) As Boolean
Dim Conmydata As SqlConnection 'para conectar con la base datos'
Dim cmdselect As SqlCommand 'sqlcommand sirve para ejecutar una instruccion de sql'
Dim strsql As String ' strsql variable donde se almacena la intruccion a ejecutar'
strsql = "insert into Guia values ('" & NumeroGuia & "','" & CodigoDest & "','" & cantidad & "','" & CodigoProd & "','" & estado & "','" & codigoMens & "')"
Conmydata = New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("StrCon").ConnectionString)
cmdselect = New SqlCommand(strsql, Conmydata)
cmdselect.CommandType = CommandType.Text
Try
Conmydata.Open() 'intenta ejecutar la instrucción, si no puede arroja la excepción o el error'
cmdselect.ExecuteNonQuery()
Conmydata.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
, como vera es algo así como mato al tigre y se asusto con la piel... je je...
Mil gracias
En código no observo problemas, ¿la tabla tiene datos?.
Tus problemas vienen por que no manejas el NULL, es decir, tablas vacías, o campos vacíos.
Hola.. Gracias por tu pronta respuesta...
La tabla no tiene valores aun, pero fíjate que cuando le activo valores nulos sale el error :
System.InvalidCastException: La conversión del tipo 'DBNull' en el tipo 'Integer' no es válida. En Microsoft. Visual basic.CompilerServices.Conversions.ToInteger(Object Value) ..
Pero ahora no me sale ese error si no el de la tabla no tiene el formato el formato esperado.
¿Qué me aconsejas?
A parte de todo lo que ya, pacientemente me has dicho..
Mil gracias..
Pero tu mismo te das la respuesta, que la tabla no tiene valores, asegurate que los tengas y no tendrás error, o asegurate que al leer manejas la posibilidad que sea nulo y que no se cae por eso.
Hola..
Que pena la demora para calificar o responderte lo pasa es que no he podido solucionar el error y me estoy matando porque no encuentro el problema. Podemos hacer algo, ¿te puedes conectar a mi pc por medio del Teamwiever 6 y echar un vistazo más cerca? La verdad me ayudaría mucho es que ya se acerca la fecha de sustentación en la universidad y temo perder pues es solo una oportunidad la otra seria en el otro año... Por favor.
Mil gracias.
hOLA..
Cambie la conexión por es :
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mauro\Desktop\Pruebilla.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1'"
Y me sale el siguiente error:
Ha ocurrido un error al momento de guardar los registros ..
Que es un mensaje que pongo cuando hay este problema. Pero tengo el ultimo campo de excel como null (codigoMens)y cuando le quito los datos que tiene ese campo aparece:
System.InvalidCastException: La conversión del tipo 'DBNull' en el tipo 'Integer' no es válida.
Y si se los pongo aparce:
Ha ocurrido un error al momento de guardar los registros ..
No se que esta pasando... Gracias.
Hola..
Por favor omite este ultimo comentario y mira este,
Le quite el ultimo campo a al archivo en excel codigoMens y también se lo quite al SQL y la función creada en visual basic y la carga de excel a SQL se hace con éxito e inserta todos los datos sin ningún problema. El error esta cuando deseo agregar datos al campo codigoMens y ese lo necesito para que cuando realice el cargue de sobres a los mensajeros tome ese código y le cambie los estados de "recibido" a "en ruta" con el mensajero X.
¿De qué otra forma pueda hacer para realizar el cargue a mensajeros sin que genere error?
Creo que es por el lado de los valores nulos en las tablas SQL, esa parte no tengo ni idea como manejar esos errores.
Mil gracias.
Ya estoy cerca...!
Ponme tu MSN Messenger para conversar.
Te he agregado.
Cierra y valora la pregunta
Respuesta
1
El comapo que estas intentando convertir viene nulo y por eso da la excepción.
Debes preguntar antes de hacer la conversión si el campo esta nulo
if DBNull.Value.Equals(TUCAMPO) then
' el campo viene nulo y no se puede hacer la conversion
else
' el campo no veine nulo y se puede hacer al conversion
end if

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas