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)

Ananth
fonte

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();
caçador
fonte
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!")
}
Zavaz
fonte
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.

StuperUser
fonte
1

Eu vou fazer como ....

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
Shailendra Mishra
fonte
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.

Sandy Sing
fonte
0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}
Sush
fonte
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