Der beste Weg, um zu überprüfen, ob eine Datentabelle einen Nullwert enthält

86

Wie kann am besten überprüft werden, ob eine Datentabelle einen Nullwert enthält?

In unserem Szenario enthält eine Spalte meistens alle Nullwerte.

(Diese Datentabelle wird von einer Drittanbieteranwendung zurückgegeben. Wir versuchen, eine Validierung vorzunehmen, bevor unsere Anwendung die Datentabelle verarbeitet.)

Ananth
quelle

Antworten:

162

Vergleichen Sie den Wert der Spalte mit dem DBNull.ValueWert, um Nullwerte nach Belieben zu filtern und zu verwalten.

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

Weitere Informationen zur DBNull-Klasse


Wenn Sie überprüfen möchten, ob in der Tabelle ein Nullwert vorhanden ist, können Sie folgende Methode verwenden:

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

Damit können Sie Folgendes schreiben:

table.HasNull();
Jäger
quelle
1
Was ist die beste Vorgehensweise für diese Erweiterungsmethode?
StuperUser
6
Normalerweise erstelle ich einen Ordner "Erweiterungen" in einer allgemeinen Bibliothek oder in meinem DAL. Erstellen Sie eine Datei mit dem Namen "DataTableExtensions.cs" und fügen Sie diese Methode hinzu. Als Nächstes fügen Sie einfach "using Name.Space.Extensions" zu Ihren cs-Dateien hinzu und haben Zugriff auf alle definierten Erweiterungsmethoden.
Jäger
3
Sie können (jetzt) table.AsEnumerable()anstelle vontable.Rows.OfType<DataRow>()
Teejay
23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}
zavaz
quelle
11

Sie können die Zeilen und Spalten in einer Schleife werfen, nach Nullen suchen, verfolgen, ob eine Null mit einem Bool vorhanden ist, und diese nach dem Durchlaufen der Tabelle überprüfen und verarbeiten.

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

Sie können die foreach-Schleife auch mit einer break-Anweisung verlassen, z

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

So sparen Sie das Durchlaufen des Restes der Tabelle.

StuperUser
quelle
1

Ich werde gerne ...

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

Sie können den Wert Etc null / leer / Leerzeichen mit LinQ Use Following Query verwenden

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

Ersetzen Sie hier den Spaltennamen durch den Tabellenspaltennamen und "" Ihr Suchelement im obigen Code. Wir suchen einen Nullwert.

Sandy Sing
quelle
0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}
Sush
quelle
5
Während dieser Code die Frage beantworten kann, ist es besser zu erklären, wie das Problem gelöst werden kann, und den Code als Beispiel oder Referenz bereitzustellen. Nur-Code-Antworten können verwirrend sein und keinen Kontext haben.
Robert Columbia