Principales respuestas
Referencia a objeto no establecida como instancia de un objeto

Pregunta
-
Hola buenas, tengo el siguiente codigo:
If ResultSet.Tables.Count > 0 Then
For Each row As DataRow In ResultSet.Tables(0).Rows
Dim InsertarFicha As DataSet
InsertarFicha = RunQuery("INSERT INTO Ficha VALUES (" + row("IdCapitulo").ToString() + ",'" + row("IdPersona").ToString() + "', '" + obra.ToString() + "', '" + row("NombreFicha").ToString() + "', '" +
row("Producto").ToString() + "', '" + row("RecomendUso").ToString() + "', '" + row("Observaciones").ToString() + "', '" + row("Marca").ToString() + "', '" + row("Limpieza").ToString() + "', '" + row("Mantenimiento").ToString() + "', " + r row("NumFicha").ToString() + ")")y me da el siguiente error:
System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
En la linea InsertarFicha = RunQuery("INSERT INTO Ficha VALUES (" + row("IdCapitulo").ToString() + ",'" + row("IdPersona").ToString() + "', '" + obra.ToString() + "', '" + row("NombreFicha").ToString() + "', '" +
Respuestas
-
"Alejandro Martin Vazquez" escribió:
> me da el siguiente error:
>
> System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
>
> En la linea InsertarFicha = RunQuery("INSERT INTO Ficha VALUES (" + row("IdCapitulo").ToString() +
> ",'" + row("IdPersona").ToString() + "', '" + obra.ToString() + "', '" +
> row("NombreFicha").ToString() + "', '" + ...Hola, Alejandro:
Al estar utilizando el método ToString para convertir a alfanumérico los distintos valores de los campos, la excepción del tipo NullReferenceException puede estar producir por cualquier row("XXXX") cuyo valor sea Nothing, así como por la variable "obra" si su valor también es Nothing, que según comentas la tienes definida como alfanumérica (String), que si es así, no tiene sentido que llames a su método ToString.
En lugar de llamar al método ToString de un valor System.Object (que es el valor que devuelve row("XXXX")), mira a ver si solucionas el error llamando al método compartido ToString de la clase Convert, el cual te devolverá una cadena de longitud cero ("") si el valor especificado es Nothing:
obra = If(Not obra Is Nothing, obra, String.Empty)
Dim sql As String = String.Format("INSERT INTO Ficha VALUES({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}',{10})", _ Convert.ToString(row("IdCapitulo")), _ Convert.ToString(row("IdPersona")), _ obra, _ Convert.ToString(row("NombreFicha")), _ Convert.ToString(row("Producto")), _ Convert.ToString(row("RecomendUso")), _ Convert.ToString(row("Observaciones")), _ Convert.ToString(row("Marca")), _ Convert.ToString(row("Limpieza")), _ Convert.ToString(row("Mantenimiento")), _ Convert.ToString(row("NumFicha"))) InsertarFicha = RunQuery(sql)
Verifica que no me haya equivocado en el número y nombres de los campos, que salvo error, son 11 campos que van desde el índice 0 al índice 10.
Por último indicarte que tampoco estaría de más que utilizases una consulta INSERT INTO con parámetros en lugar de estar concatenando los valores alfanuméricos en la propia consulta.
Un saludo
Enrique Martínez Montejo
[MS MVP - Visual Studio y Tecnologías de Desarrollo]
Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.
Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción Option Strict.
- Propuesto como respuesta Sergio Parra viernes, 18 de marzo de 2016 8:54
- Editado Enrique M. MontejoModerator viernes, 18 de marzo de 2016 11:29
- Marcado como respuesta Enrique M. MontejoModerator domingo, 20 de marzo de 2016 16:17
Todas las respuestas
-
-
-
-
"Alejandro Martin Vazquez" escribió:
> me da el siguiente error:
>
> System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.
>
> En la linea InsertarFicha = RunQuery("INSERT INTO Ficha VALUES (" + row("IdCapitulo").ToString() +
> ",'" + row("IdPersona").ToString() + "', '" + obra.ToString() + "', '" +
> row("NombreFicha").ToString() + "', '" + ...Hola, Alejandro:
Al estar utilizando el método ToString para convertir a alfanumérico los distintos valores de los campos, la excepción del tipo NullReferenceException puede estar producir por cualquier row("XXXX") cuyo valor sea Nothing, así como por la variable "obra" si su valor también es Nothing, que según comentas la tienes definida como alfanumérica (String), que si es así, no tiene sentido que llames a su método ToString.
En lugar de llamar al método ToString de un valor System.Object (que es el valor que devuelve row("XXXX")), mira a ver si solucionas el error llamando al método compartido ToString de la clase Convert, el cual te devolverá una cadena de longitud cero ("") si el valor especificado es Nothing:
obra = If(Not obra Is Nothing, obra, String.Empty)
Dim sql As String = String.Format("INSERT INTO Ficha VALUES({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}',{10})", _ Convert.ToString(row("IdCapitulo")), _ Convert.ToString(row("IdPersona")), _ obra, _ Convert.ToString(row("NombreFicha")), _ Convert.ToString(row("Producto")), _ Convert.ToString(row("RecomendUso")), _ Convert.ToString(row("Observaciones")), _ Convert.ToString(row("Marca")), _ Convert.ToString(row("Limpieza")), _ Convert.ToString(row("Mantenimiento")), _ Convert.ToString(row("NumFicha"))) InsertarFicha = RunQuery(sql)
Verifica que no me haya equivocado en el número y nombres de los campos, que salvo error, son 11 campos que van desde el índice 0 al índice 10.
Por último indicarte que tampoco estaría de más que utilizases una consulta INSERT INTO con parámetros en lugar de estar concatenando los valores alfanuméricos en la propia consulta.
Un saludo
Enrique Martínez Montejo
[MS MVP - Visual Studio y Tecnologías de Desarrollo]
Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.
Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción Option Strict.
- Propuesto como respuesta Sergio Parra viernes, 18 de marzo de 2016 8:54
- Editado Enrique M. MontejoModerator viernes, 18 de marzo de 2016 11:29
- Marcado como respuesta Enrique M. MontejoModerator domingo, 20 de marzo de 2016 16:17