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

Ana*_*nth 83 .net c# validation datatable null

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

在我们的场景中,大多数情况下,一列将具有所有空值.

(这个数据表由第三方应用程序返回 - 我们试图在我们的应用程序处理数据表之前进行一个valiadation)

hun*_*ter 155

尝试将列的DBNull.Value值与值进行比较,以便以您认为合适的任何方式过滤和管理空值.

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

有关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;
}
Run Code Online (Sandbox Code Playgroud)

这会让你写这个:

table.HasNull();
Run Code Online (Sandbox Code Playgroud)

  • 我通常在一些公共库或我的DAL中创建一个"Extensions"文件夹.创建一个名为"DataTableExtensions.cs"的文件并添加该方法.接下来,您只需将"使用Name.Space.Extensions"添加到您的cs文件,并可以访问定义的所有扩展方法. (6认同)
  • 您可以(现在)使用`table.AsEnumerable()`而不是`table.Rows.OfType <DataRow>()` (3认同)
  • 此扩展方法应该放在哪里的最佳实践是什么? (2认同)

zav*_*vaz 23

foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}
Run Code Online (Sandbox Code Playgroud)


Stu*_*ser 10

你可以循环抛出行和列,检查空值,跟踪是否有bool的null,然后在循环遍历表并处理它之后检查它.

//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
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用break语句从foreach循环中退出

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

通过表的其余部分保存循环.