2009-04-01 17 views
11

J'ai un DataTable resultSet; - J'essaie de vérifier les champs pour la valeur null, mais de récupérer un objet '{}' (empty-set?). Les recherches impliquant "{}" ne donnent aucune solution appropriée.C# DataTable ItemArray renvoie '{}' - comment puis-je tester une valeur nulle?

C'est le code qui ne fonctionne pas comme prévu lorsque le champ « fk_id » est nulle:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == null) 
{ 
    //never reaches here 
} 

Note: en utilisant un index int au lieu du Columns.IndexOf() est pas la question.

Est-ce que le "{}" a un autre nom en C#?

Répondre

18

Pour vérifier une colonne pour DBNull dans un DataSet, vous pouvez utiliser la méthode IsNull:

if (resultSet.Rows[0].IsNull("fk_id")) 

Votre comparaison contre null est probablement échoué parce que DataSets ne pas utiliser null pour représenter une valeur « NULL de base de données » - ils utilisent DBNull.Value. Si vous avez besoin de votre code pour la façon dont vous avez présenté, essayez ceci:

if (resultSet.Rows[0].ItemArray[resultSet.Columns.IndexOf("fk_id")] == DBNull.Value) 
+0

Grand merci, complètement oublié "DBNull.Value" - ça fait un moment que j'ai manipulé des jeux de données –

+0

Je me demande pourquoi ils l'ont conçu de cette façon au lieu de simplement utiliser null? –

+2

@ k.rob Parce qu'il n'y avait pas Nullable dans .NET 1.0, il n'y avait donc aucun moyen de représenter une valeur Int32 de "null". –

-2
try 
{ 
    if (DT.Rows[0][0] != null) 
    {  
     //your code 
    }  
}  
catch  
{  
    MessageBox.Show("AUTHANICATION FAILED.");  
} 
-2

S'il vous plaît utiliser:

dataTable.Select("FieldName is NULL") 

cela vous donnera les DataRows avec des valeurs NULL dans la colonne FieldName .