2010-08-03 19 views
16

Je peux vérifier un DBnull sur une ligne de données en utilisant l'une des méthodes.Que devrais-je utiliser pour comparer DBNull? Utilisation de DBNull.Value ou ToString(). IsNullOrEmpty()

Soit en utilisant

if(dr[0][0]==DBNull.Value) 
//do somethin 

ou en faisant

if(dr[0][0].ToString().IsNullOrEmpty()) 
//do something 

Dans les deux cas, je vais avoir même résultat.

Mais Laquelle est approchée correctement? Lequel utiliserait moins de ressources

+0

'.ToString(). IsNullOrEmpty()'? Est-ce qu'une data ** row ** a 2 indices, 'dr [0] [0]'? Et si 'dr [0] [0]' est nul, vous ne pouvez pas appeler '.ToString()'. Il est généralement préférable de fournir un code de travail pour obtenir de meilleures réponses. – Kobi

+0

@Kobi: Mon erreur vous avez raison je voulais dire DataTable si prendre deux indexeurs –

+0

pour le second cas, si la valeur dans cette colonne est nulle, vous obtiendrez une erreur – devnull

Répondre

15

La première méthode est quelque peu correcte. Cependant, de façon plus acceptée est:

if (dr[0][0] is DBNull) 

Et la deuxième façon est certainement incorrecte. Si vous utilisez la deuxième façon, vous obtiendrez vrai dans deux cas:

  1. Votre valeur est DBNull
  2. Votre valeur est une chaîne vide
5

Conceptuellement la comparaison à DBNull.Value est correcte.

Vous pouvez également utiliser:

if (Convert.IsDBNull(dr[0])) 
{ 
} 

Vous pouvez également utiliser, que je ne suis pas fan de, tout simplement parce qu'il est une comparaison de type plutôt qu'une comparaison de la valeur:

if (dr[0] is DBNull) 
{ 
} 
+0

Deuxième lit bien, cependant. – cdmckay

0

Est toujours utiliser:

dr[0].IsNull(0) 

En supposant que les créateurs de cette fonction connaissent la meilleure façon/la manière la plus efficace de aring ..

0

La façon la plus simple

if (dr[0][0] == DBNull.Value) 
//do somethin 

est parfaitement lisible et valide.

Même si == compare des références, cela fonctionne ici parce que DBNUll.Value is the only instance of DBNull class - donc toutes les valeurs DBNull sont réellement cette référence exacte.