Il modo migliore per verificare se una tabella dati contiene un valore nullo


87

qual è il modo migliore per verificare se una tabella dati contiene un valore nullo?

La maggior parte delle volte nel nostro scenario, una colonna avrà tutti i valori nulli.

(Questo datatable viene restituito da un'applicazione di terze parti: stiamo cercando di inserire una valutazione prima che la nostra applicazione elabori la tabella dei dati)


Risposte:


164

Prova a confrontare il valore della colonna con il DBNull.Valuevalore per filtrare e gestire i valori nulli in qualsiasi modo tu ritenga opportuno.

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

Ulteriori informazioni sulla classe DBNull


Se vuoi controllare se esiste un valore nullo nella tabella puoi usare questo metodo:

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;
}

che ti permetterà di scrivere questo:

table.HasNull();

1
Qual è la migliore pratica per dove dovrebbe andare questo metodo di estensione?
StuperUser

6
Di solito creo una cartella "Estensioni" in una libreria comune o nel mio DAL. Crea un file chiamato "DataTableExtensions.cs" e aggiungi quel metodo. Successivamente devi semplicemente aggiungere "using Name.Space.Extensions" ai tuoi file cs e avere accesso a tutti i metodi di estensione definiti.
cacciatore

3
Puoi (ora) usare al table.AsEnumerable()posto ditable.Rows.OfType<DataRow>()
Teejay

23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}

11

Puoi eseguire il loop delle righe e delle colonne, verificare la presenza di null, tenere traccia della presenza di un null con un bool, quindi controllarlo dopo aver eseguito il loop nella tabella e gestirlo.

//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
}

Puoi anche uscire dal ciclo foreach con un'istruzione break es

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

Per salvare il ciclo attraverso il resto della tabella.



0

È possibile null / vuoto / spazio valore Etc utilizzando LinQ Use Following Query

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

Qui Sostituire Columnname con il nome colonna della tabella e "" il vostro articolo di ricerca nel codice di cui sopra guardando valore nullo.


0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}

5
Sebbene questo codice possa rispondere alla domanda, è meglio spiegare come risolvere il problema e fornire il codice come esempio o riferimento. Le risposte di solo codice possono creare confusione e mancare di contesto.
Robert Columbia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.