Meilleur moyen de vérifier si une table de données contient une valeur nulle

87

Quelle est la meilleure façon de vérifier si une table de données contient une valeur nulle?

La plupart du temps dans notre scénario, une colonne aura toutes les valeurs nulles.

(Cette table de données est retournée par une application tierce - nous essayons de mettre une validation avant que notre application traite la table de données)

Ananthe
la source

Réponses:

164

Essayez de comparer la valeur de la colonne à la DBNull.Valuevaleur pour filtrer et gérer les valeurs nulles de la manière qui vous convient.

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}

Plus d'informations sur la classe DBNull


Si vous souhaitez vérifier si une valeur nulle existe dans le tableau, vous pouvez utiliser cette méthode:

public static bool HasNull(this DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
            return true;
    }

    return false;
}

qui vous permettra d'écrire ceci:

table.HasNull();
chasseur
la source
1
Quelle est la meilleure pratique pour savoir où cette méthode d'extension devrait aller?
StuperUser
6
Je crée généralement un dossier "Extensions" dans une bibliothèque commune ou dans mon DAL. Créez un fichier appelé "DataTableExtensions.cs" et ajoutez cette méthode. Ensuite, vous ajoutez simplement "using Name.Space.Extensions" à vos fichiers cs et avez accès à toutes les méthodes d'extension définies.
chasseur
3
Vous pouvez (maintenant) utiliser à la table.AsEnumerable()place detable.Rows.OfType<DataRow>()
Teejay
23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}
Zavaz
la source
11

Vous pouvez lancer en boucle les lignes et les colonnes, vérifier les valeurs nulles, savoir s'il y a une valeur nulle avec un booléen, puis la vérifier après avoir parcouru la table et la gérer.

//your DataTable, replace with table get code
DataTable table = new DataTable();
bool tableHasNull = false;

foreach (DataRow row in table.Rows)
{
    foreach (DataColumn col in table.Columns)
    {
        //test for null here
        if (row[col] == DBNull.Value)
        {
            tableHasNull = true;
        }
    }
}

if (tableHasNull)
{
    //handle null in table
}

Vous pouvez également sortir de la boucle foreach avec une instruction break, par exemple

//test for null here
if (row[col] == DBNull.Value)
{
    tableHasNull = true;
    break;
}

Pour enregistrer une boucle dans le reste du tableau.

StuperUser
la source
1

Je ferai comme ...

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
Shailendra Mishra
la source
0

Vous pouvez utiliser la valeur Etc null / blank / space en utilisant LinQ Utiliser la requête suivante

   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);

Remplacez ici Nom de colonne par le nom de colonne de table et "" votre élément de recherche dans le code ci-dessus, nous recherchons une valeur nulle.

Sandy chanter
la source
0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}
Sush
la source
5
Bien que ce code puisse répondre à la question, il est préférable d'expliquer comment résoudre le problème et de fournir le code à titre d'exemple ou de référence. Les réponses basées uniquement sur le code peuvent prêter à confusion et manquer de contexte.
Robert Columbia