Bir Veri Tablosunun içinde boş değer olup olmadığını kontrol etmenin en iyi yolu


90

Bir Veri Tablosunun içinde boş değer olup olmadığını kontrol etmenin en iyi yolu nedir?

Senaryomuzda çoğu zaman, bir sütunun tümü boş değerlere sahip olacaktır.

(Bu veri tablosu bir 3. taraf uygulaması tarafından döndürülür - uygulamamız veri tablosunu işlemeden önce bir doğrulama koymaya çalışıyoruz)


Yanıtlar:


168

DBNull.ValueBoş değerleri uygun gördüğünüz şekilde filtrelemek ve yönetmek için sütunun değerini değerle karşılaştırmayı deneyin .

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

DBNull sınıfı hakkında daha fazla bilgi


Tabloda bir boş değer olup olmadığını kontrol etmek istiyorsanız, bu yöntemi kullanabilirsiniz:

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

bunu yazmana izin verecek:

table.HasNull();

1
Bu uzantı yönteminin nereye gitmesi gerektiğine ilişkin en iyi uygulama nedir?
StuperUser

6
Genellikle bazı ortak kitaplıklarda veya DAL'ımda bir "Uzantılar" klasörü oluştururum. "DataTableExtensions.cs" adlı bir dosya oluşturun ve bu yöntemi ekleyin. Daha sonra cs dosyalarınıza "using Name.Space.Extensions" eklersiniz ve tanımlanan tüm uzantı yöntemlerine erişebilirsiniz.
avcı

3
Bunun table.AsEnumerable()yerine (şimdi) kullanabilirsiniztable.Rows.OfType<DataRow>()
Teejay

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

11

Satırları ve sütunları döngüsel olarak atabilir, boşları kontrol edebilir, bool ile bir boş olup olmadığını takip edebilir, ardından tablo boyunca döngü yaptıktan sonra kontrol edebilir ve işleyebilirsiniz.

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

Ayrıca foreach döngüsünden break ifadesiyle de çıkabilirsiniz, örn.

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

Tablonun geri kalanında döngüden tasarruf etmek için.



0

LinQ kullanarak null / boşluk / boşluk Etc değeri yapabilirsiniz Aşağıdaki Sorguyu Kullanın

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

İşte değiştirin SütunAdı Tablo sütun adı ile "" Yukarıdaki kodda arama öğesi biz boş değer görünümlü.


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

5
Bu kod soruyu yanıtlasa da sorunun nasıl çözüleceğini açıklamak ve kodu örnek veya referans olarak sağlamak daha iyidir. Yalnızca kod yanıtları kafa karıştırıcı olabilir ve bağlamdan yoksun olabilir.
Robert Columbia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.