2012-01-19 2 views
2

Je trouve des difficultés à valider les éléments suivantsVérifier DBNull en C#

if(personDS.person[0].IdFk!= DBNull.Value) 

c'est l'erreur de compilation - ne peut pas être appliquée aux opérandes de type « System.Guid et « System.DBNull »

+0

exception est levée lorsque vous essayez d'accéder à IdFk parce que ce n'est pas annulable. –

+0

Vous pourriez trouver la réponse ici: stackoverflow.com/questions/211436/nullable-guid Question GUID Nullable. –

Répondre

4

Je pense que vous devriez vérifier:

0

vous pouvez également vérifier contre un vide Guid

if (personDS.person[0].IdFk == Guid.Empty) 
0

essayer

if(!(personDS.person[0].IdFk is System.DBNull)) 
+0

Si IdFk est nul, il lèvera une exception. Vérifiez la classe autogénérée DataSet pour la mise en œuvre. La propriété jette et exception. Peut-être que cela peut être changé par la propriété de la colonne, mais cela n'a pas fonctionné pour moi. –

0

Id est un Guid, qui est un type de valeur et sera donc jamais égale DBNull.Value. Avant que je puisse entièrement aider, j'ai besoin de connaître les types de personDS (DataSet peut-être?) Et person (DataTable peut-être). En supposant donc, alors peut-être:

if (!personDS.person[0].IsNull("IdFK")) 

Si person n'est pas un DataTable mais une classe, puis vérifier soit IdFk == Guid.Empty, si IdFk est un Guid ou IdFk == null si IdFk est Guid?.

0

Est-ce que IdFk est déclaré comme étant nul? Es:

public Guid? Idfk 

Si oui, vous pouvez:

if(personDS.person[0].IdFk.HasValue) 
+0

Autant que je puisse dire c'est un non-sens complet, pour les raisons suivantes: 1) 'public' commence par un plus petit' p' 2) le suffixe '?' Doit être ajouté au type, pas l'identifiant 3) si 'personDS.person [0] .IdFK' est en effet nul le code lancera une exception' InvalidOperationException', sinon la condition sera toujours fausse, puisque 'DBNull.Value' ne sera rien d'autre que lui-même et un' Guid' ne pourra jamais être de type DBNull (et il ne compilera pas, puisque vous ne pouvez pas comparer 'Guid' et' DBNull' sans avoir fusionné l'un et l'autre, ce qui fera une comparaison de référence) – Nuffin

+0

True, je sans VS maintenant et codage en vb cette période. Fait un peu de confusion :) Edité la réponse de toute façon, merci. –

Questions connexes