检查数据表中是否为空值的最佳方法


87

检查数据表中是否有空值的最佳方法是什么?

在我们的方案中,大多数情况下,一列将具有所有空值。

(此数据表由第三方应用程序返回-我们正在尝试在我们的应用程序处理数据表之前放置一个别名)


Answers:


163

尝试将列的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 2011年

6
我通常在一些公共库或DAL中创建一个“扩展”文件夹。创建一个名为“ DataTableExtensions.cs”的文件并添加该方法。接下来,您只需将“ using 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

您可以循环抛出行和列,检查是否为空,使用bool跟踪是否存在空值,然后在遍历表并对其进行处理后对其进行检查。

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

您也可以使用break语句退出foreach循环,例如

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

为了节省遍历表的其余部分。



0

您可以使用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
尽管此代码可以回答问题,但最好解释一下如何解决问题并提供示例或参考代码。仅代码的答案可能会造成混乱,并且缺乏上下文。
罗伯特·哥伦比亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.