Найкращий спосіб перевірити, чи містить таблиця даних нульове значення


87

який найкращий спосіб перевірити, чи є в таблиці даних нульове значення?

Найчастіше в нашому сценарії один стовпець буде мати усі нульові значення.

(Ця таблиця даних повертається стороннім додатком - ми намагаємося перевірити валідацію, перш ніж наша програма обробить таблицю даних)


Відповіді:


164

Спробуйте порівняти значення стовпця зі DBNull.Valueзначенням, щоб відфільтрувати та керувати нульовими значеннями будь-яким способом, який вам подобається.

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

Докладніше про клас DBNull


Якщо ви хочете перевірити, чи в таблиці існує нульове значення, ви можете використовувати цей метод:

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

що дозволить вам написати це:

table.HasNull();

1
Яка найкраща практика для використання цього методу розширення?
StuperUser

6
Зазвичай я створюю папку "Розширення" в якійсь загальній бібліотеці або в моєму DAL. Створіть файл "DataTableExtensions.cs" і додайте цей метод. Далі ви просто додасте "за допомогою Name.Space.Extensions" до своїх файлів cs і отримаєте доступ до всіх визначених методів розширення.
мисливець

3
Ви можете (зараз) використовувати table.AsEnumerable()замістьtable.Rows.OfType<DataRow>()
Teejay

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

11

Ви можете циклічно викидати рядки та стовпці, перевіряючи наявність нульових значень, відстежуючи, чи є нульовий значення булом, а потім перевіряти його після перегляду таблиці та обробляти.

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

Ви також можете вийти з циклу foreach із заявою break, наприклад

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

Щоб заощадити перегортання решти таблиці.



0

Ви можете нульове / порожнє / пробілове значення Etc за допомогою LinQ Використовувати наступний запит

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

Тут Замінити ColumnName з ім'ям стовпця таблиці і «» пошук елемент в коді вище ми шукаємо нульове значення.


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

5
Хоча цей код може відповісти на запитання, краще пояснити, як вирішити проблему, і навести код як приклад або посилання. Відповіді лише на коди можуть заплутати і не мати контексту.
Роберт Колумбія,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.