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

时间:2011-01-05 13:16:58

标签: c# .net validation datatable null

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

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

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

7 个答案:

答案 0 :(得分:147)

尝试将列的值与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();

答案 1 :(得分:23)

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

答案 2 :(得分: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
}

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

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

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

答案 3 :(得分:1)

我会喜欢......

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

答案 4 :(得分:0)

function forEach(target, fn) {
    const keys = Object.keys(target);
    let i = -1;
    while (++i < keys.length) {
        fn(target[keys[i]], keys[i]);
    }
}

function setValues(obj, src) {
    forEach(src, (value, key) => {
        if (value !== null && typeof (value) === "object") {
            setValues(obj[key], value);
        } else {
            obj[key] = value;
        }
    });
}

let obj1 = {foo: {bar: 1, boo: {zot: null}}};
let obj2 = {foo: {baz: 3, boo: {zot: 5}}};

setValues(obj1, obj2);

console.log(JSON.stringify(obj1));

答案 5 :(得分:0)

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

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

在此处用表列名替换列名,并在上面的代码中用“” 您的搜索项,我们寻找空值。

答案 6 :(得分:0)

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