none
Referencia a objeto no establecida como instancia de un objeto RRS feed

  • 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() + "', '" +

    jueves, 17 de marzo de 2016 8:42

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.




    viernes, 18 de marzo de 2016 8:50
    Moderador

Todas las respuestas

  • El error te lo da por el objeto "obra" ¿existe? ¿No es nulo?

    Saludos, Javier J

    jueves, 17 de marzo de 2016 9:11
  • Si es un String creado previamente
    jueves, 17 de marzo de 2016 9:46
  • ¿Y que valor tiene? Si no lo has inicializado tendrá el valor Nothing y por eso te da el error.

    Saludos, Javier J

    jueves, 17 de marzo de 2016 10:37
  • "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.




    viernes, 18 de marzo de 2016 8:50
    Moderador