2017-02-16 1 views
0

Modifier: Juste pour être clair, je ne pose pas de questions sur (Null vs DBNull.Value) ou (IsDBNull vs IsNull).IsDBNull vs DBNull.Value, sont-ils identiques?


Eh bien, je l'utilise toujours IsDBNull() pour évaluer les champs de base de données et vérifier si la valeur est DBNull, mais je remarque que dans de nombreux exemples de code, les gens utilisent DBNull.Value dans le même but. Voici comment:

If IsDBNull(obj) Then DoSomething()  ' ---> My approach 
If obj = DBNull.Value Then DoSomething() ' ---> Theirs. 

également en C#:

if (obj == DBNull.Value) {DoSomething();} 

Je l'ai fait une recherche pour savoir si elles sont les mêmes ou s'il y a une différence entre eux, mais ne peut pas trouver des articles utiles que montrent ces deux approches d'évaluation particulières ensemble.

This MSDN link montre comment DBNull.Value.Equals fait la même chose que IsDBNull fonction, mais ne mentionne jamais/suggère d'utiliser DBNull.Value pour l'évaluation, sans l'utilisation de la fonction Equals. Donc, je me demande vraiment, y a-t-il une différence réelle entre ces deux pour que l'un d'eux soit recommandé par rapport à l'autre? Ou font-ils exactement la même chose?

+1

Cette deuxième ligne devrait utiliser 'Is' plutôt que' = 'mais, à part cela, ils sont fonctionnellement équivalents. Cette méthode 'IsDBNull' utilise probablement cette seconde méthode en interne. – jmcilhinney

+0

[Voici l'implémentation .Net.] (Https://github.com/Microsoft/referencesource/blob/master/System.Data/System/Data/SqlClient/SqlDataReader.cs#L2917) –

+0

@WillRay, c'est-à-dire implémentation de la méthode 'SqlDataReader.IsDBNull', qui n'est pas celle spécifiée dans la question. La méthode dans le code ci-dessus est 'Microsoft.VisualBasic.Information.IsDBNull'. – jmcilhinney

Répondre

0

Non, ce ne sont pas les mêmes. DBNull.Value est effectivement une constante, tandis que IsDBNull est une fonction qui renvoie true ou false. Le IsDbNull est un indicateur de test retournant Boolean et est une expression de raccourci pour If Statements. Vous pouvez toujours utiliser la méthode Obj = DBNull.value mais IsDbNull est la méthode préférée selon MS.

Cependant, si vous souhaitez utiliser une instruction select de cas, vous devez toujours utiliser l'objet DBNull.Value

Select case Obj 
    Case DBNull.value 
    Case "Whatever" 
End Select 

Bien sûr, vous avez besoin DBNull.Value si vous souhaitez définir un champ arrière à une valeur nulle.

Il est similaire à Double.IsNaN et Double.NaN.