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

Posted

技术标签:

【中文标题】检查数据表中是不是包含空值的最佳方法【英文标题】:Best way to check if a Data Table has a null value in it检查数据表中是否包含空值的最佳方法 【发布时间】:2011-06-04 00:21:59 【问题描述】:

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

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

(此数据表由第 3 方应用程序返回 - 我们正在尝试在我们的应用程序处理数据表之前进行验证)

【问题讨论】:

Most efficient way to check for DBNull and then assign to a variable?的可能重复 【参考方案1】:
public static class DataRowExtensions

    public static T GetValue<T>(this DataRow row, string fieldName)
    
        if (row.IsNull(fieldName))
        
            return default(T);
        

        var value = row[fieldName];
        if (value == DBNull.Value)
        
            return default(T);
        

        if (typeof(T) == typeof(string))
        
            return (T)Convert.ChangeType(value.ToString(), typeof(T));
        

        return (T)Convert.ChangeType((T)value, typeof(T));
    


用法:

string value = row.GetValue<string>("ColumnName");

【讨论】:

【参考方案2】:
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)

    if (dr["Column_Name"] == DBNull.Value)
    
        //Do something
    
    else
    
        //Do something
    

【讨论】:

虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。【参考方案3】:

您可以使用 LinQ 为空/空白/空格等值 使用以下查询

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

这里将 Columnname 替换为表列名和 "" 您在上面的代码中的搜索项,我们查找空值。

【讨论】:

【参考方案4】:

我会喜欢的......

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))

【讨论】:

【参考方案5】:

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

foreach(DataRow row in table.Rows)

    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else

More information about the DBNull class


如果要检查表中是否存在空值,可以使用这种方法:

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();

【讨论】:

这种扩展方法的最佳实践是什么? 我通常在一些公共库或我的 DAL 中创建一个“扩展”文件夹。创建一个名为“DataTableExtensions.cs”的文件并添加该方法。接下来,您只需将“使用 Name.Space.Extensions”添加到您的 cs 文件并可以访问所有定义的扩展方法。 你可以(现在)使用table.AsEnumerable()而不是table.Rows.OfType&lt;DataRow&gt;()【参考方案6】:

你可以循环抛出行和列,检查空值,用布尔值跟踪是否有空值,然后在循环遍历表后检查并处理它。

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

保存循环遍历表格的其余部分。

【讨论】:

【参考方案7】:
foreach(DataRow row in dataTable.Rows)

    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")

【讨论】:

以上是关于检查数据表中是不是包含空值的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中检查空值的最佳方法是啥?

用python.检查“影片名称”字段为空值的+数据,给该字段填充数+据"unnamed"?

检查输入字段中的空值的正确方法是啥[重复]

如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”

检查 arraytype 列是不是包含 null

类型表空值检查