Melhor maneira de verificar se uma Tabela de Dados contém um valor nulo


87

Qual é a melhor maneira de verificar se uma Tabela de Dados contém um valor nulo?

Na maioria das vezes em nosso cenário, uma coluna terá todos os valores nulos.

(Esta tabela de dados é retornada por um aplicativo de terceiros - estamos tentando colocar uma valiação antes que nosso aplicativo processe a tabela de dados)


Respostas:


164

Tente comparar o valor da coluna com o DBNull.Valuevalor para filtrar e gerenciar valores nulos da maneira que achar adequada.

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

Mais informações sobre a classe DBNull


Se você deseja verificar se existe um valor nulo na tabela, você pode usar este método:

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

que permitirá que você escreva isto:

table.HasNull();

1
Qual é a prática recomendada para onde esse método de extensão deve ir?
StuperUser

6
Normalmente crio uma pasta "Extensões" em alguma biblioteca comum ou em meu DAL. Crie um arquivo chamado "DataTableExtensions.cs" e adicione esse método. Em seguida, você apenas adicionaria "using Name.Space.Extensions" aos seus arquivos cs e teria acesso a todos os métodos de extensão definidos.
hunter

3
Você pode (agora) usar em table.AsEnumerable()vez detable.Rows.OfType<DataRow>()
Teejay

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

11

Você pode executar um loop nas linhas e colunas, verificando se há nulos, controlando se há um nulo com um bool e, em seguida, verificá-lo após fazer o loop pela tabela e manipulá-lo.

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

Você também pode sair do loop foreach com uma instrução break, por exemplo

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

Para salvar o looping pelo resto da tabela.



0

Você pode null / blank / space Etc value usando LinQ Use following Query

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

Aqui, substitua Columnname pelo nome da coluna da tabela e "" seu item de pesquisa no código acima, procurando valor nulo.


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

5
Embora este código possa responder à pergunta, é melhor explicar como resolver o problema e fornecer o código como um exemplo ou referência. Respostas somente em código podem ser confusas e não ter contexto.
Robert Columbia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.