Pregunta

Estoy utilizando un conjunto de datos para extraer datos de una base de datos. Uno de los campos en una fila es NULL. Yo se esto. Sin embargo, el siguiente código de vb.net lanza una StrongTypingException (en el get_SomeField autogenerado (método) en el diseñador conjunto de datos):

If Not IsDBNull(aRow.SomeField) Then
'do something
End If

De acuerdo con la documentación y esta pregunta que debería estar bien.

editar: If aRow.SomeField is DBNull.Value Then también devuelve el mismo error. Argh.

¿Fue útil?

Solución

La diferencia es que en la cuestión conexa, se está hablando de un valor sin tipo (es decir object) a través de un indexador. Cuando usted va a través de .SomeField, el tipo ya está incluido - por lo que este podría ser int etc, y que no tendría sentido tratar IsDBNull en una int, como int puede no ser DBNull

En esencia, el SomeField es un contenedor para (con perdón del C # acento ...)

public int SomeField {
    get { return (int) this["someFieldName"]; }
    set { this["someFieldName"] = value; }
}

No soy una persona enorme DataTable, pero se puede intentar comprobar por su nombre / index / columna; o marcar la columna como así anulable que es Nullable<int> (en el ejemplo anterior).

Otros consejos

Sólo un poco de información adicional: La excepción viene porque está utilizando un fuertemente DataSet . StrongTypingException documentación dice que:

La excepción que se produce por un conjunto de datos con establecimiento inflexible cuando el usuario accede a un valor DBNull.

El uso de conjuntos de datos con establecimiento inflexible es ligeramente diferente de la de los sin tipo. Con conjuntos de datos con establecimiento inflexible se obtiene de forma automática algunos métodos ampliada / adicionales para sus campos que se pueden llamar. En el caso de que le muy probable que tenga que llamar a:

If Not aRow.IsSomeFieldNull Then
   'do something
End If

Prueba esto: aRow.IsSomeFieldNull

Hay una clara forma de ir a su alrededor. Pero hay que ser conscientes de las consecuencias.

Para evitar excepción de que ocurren puede cambiar en el conjunto de datos NullValue propiedad de campo que sea "nulo" o "vacío" (lo que se adapte a sus necesidades). Por defecto se establece en "excepción throw".

Para una mirada referencia aquí: MSDN la documentación

Buena suerte.

**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**

Esta pregunta es viejo, pero lo que estoy añadiendo no parece estar en cualquiera de las otras respuestas.

Si utiliza

If Not IsDBNull(aRow.item("SomeField")) Then
    'do something
End If

Esto no va a lanzar una excepción, incluso si usted está usando un conjunto de datos con establecimiento inflexible

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top