Question

J'utilise un ensemble de données pour extraire des données à partir d'un DB. L'un des champs dans une rangée est NULL. Je sais ça. Cependant, le code vb.net suivant jette un StrongTypingException (dans la méthode get_SomeField () autogénérés dans le concepteur de jeux de données):

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

D'après la documentation et cette question il devrait être bien.

edit: If aRow.SomeField is DBNull.Value Then renvoie également la même erreur. Argh.

Était-ce utile?

La solution

La différence est que dans la question connexe on parle d'une valeur non typé (à savoir object) par l'intermédiaire d'un indexeur. Lorsque vous passez par .SomeField, le type est déjà inclus - donc cela pourrait être int etc. Et il ne serait pas logique d'essayer IsDBNull sur un int, comme int pouvez jamais être DBNull

Essentiellement, le SomeField est une enveloppe pour (excusez l'accent C # ...)

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

Je ne suis pas une grande personne DataTable, mais vous pouvez essayer de vérifier par son nom / index / colonne; ou le marquage de la colonne comme nullable de sorte qu'il est Nullable<int> (dans l'exemple ci-dessus).

Autres conseils

Juste quelques informations supplémentaires: L'exception vient du fait que vous utilisez un DataSet fortement typé . StrongTypingException la documentation dit:

  

L'exception qui est levée par un DataSet fortement typé lorsque l'utilisateur accède à une valeur DBNull.

L'utilisation de DataSets fortement typés est légèrement différente de celle de ceux typées. Avec DataSets fortement typés vous obtenez automatiquement certaines étendues / méthodes supplémentaires pour vos champs que vous pouvez appeler. Dans votre cas, vous auriez très probablement appeler:

If Not aRow.IsSomeFieldNull Then
   'do something
End If

Essayez ceci:  aRow.IsSomeFieldNull

Il y a une belle façon d'aller autour d'elle. Mais vous devez être conscient des conséquences.

Pour éviter exception, vous pouvez changer survenant dans DataSet propriété de champ NullValue soit « nul » ou « vide » (ce qui convient à vos besoins). Par défaut est réglé sur « Throw Exception ».

Pour un look de référence ici: documentation msdn

Bonne chance.

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

Cette question est vieux, mais ce que je suis d'ajouter ne semble pas être dans l'une des autres réponses.

Si vous utilisez

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

Ce ne sera pas jeter une exception, même si vous utilisez un ensemble de données fortement typé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top