Cara terbaik untuk memeriksa apakah Tabel Data memiliki nilai null di dalamnya

90

apa cara terbaik untuk memeriksa apakah Tabel Data memiliki nilai null di dalamnya?

Sebagian besar waktu dalam skenario kami, satu kolom akan memiliki semua nilai nol.

(Data-data ini dikembalikan oleh aplikasi pihak ketiga - kami mencoba untuk menempatkan pembenaran sebelum aplikasi kami memproses tabel data)

Ananth
sumber

Jawaban:

168

Coba bandingkan nilai kolom dengan DBNull.Valuenilai untuk memfilter dan mengelola nilai null dengan cara apa pun yang Anda inginkan.

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

Informasi lebih lanjut tentang kelas DBNull


Jika Anda ingin memeriksa apakah ada nilai null di tabel, Anda dapat menggunakan metode ini:

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

yang memungkinkan Anda menulis ini:

table.HasNull();
pemburu
sumber
1
Apa praktik terbaik untuk kemana metode ekstensi ini harus digunakan?
StuperUser
6
Saya biasanya membuat folder "Ekstensi" di beberapa perpustakaan umum atau di DAL saya. Buat file bernama "DataTableExtensions.cs" dan tambahkan metode itu. Selanjutnya Anda cukup menambahkan "menggunakan Name.Space.Extensions" ke file cs Anda dan memiliki akses ke semua metode ekstensi yang ditentukan.
pemburu
3
Anda dapat (sekarang) menggunakan table.AsEnumerable()sebagai penggantitable.Rows.OfType<DataRow>()
Teejay
23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}
zavaz.dll
sumber
11

Anda dapat melakukan loop melempar baris dan kolom, memeriksa null, melacak apakah ada null dengan bool, lalu memeriksanya setelah melakukan perulangan melalui tabel dan menanganinya.

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

Anda juga bisa keluar dari loop foreach dengan pernyataan break misalnya

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

Untuk menghemat perulangan melalui sisa tabel.

StuperUser
sumber
1

Saya akan melakukan seperti ....

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

Anda dapat null / blank / spasi nilai Etc menggunakan LinQ Gunakan Kueri Mengikuti

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

Berikut Ganti columnName dengan nama kolom tabel dan "" item yang Anda cari dalam kode di atas kita melihat nilai null.

Sandy Sing
sumber
0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}
Sush
sumber
5
Meskipun kode ini dapat menjawab pertanyaan, lebih baik menjelaskan cara menyelesaikan masalah dan memberikan kode sebagai contoh atau referensi. Jawaban kode-saja dapat membingungkan dan tidak memiliki konteks.
Robert Columbia