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

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

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

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

310886 次浏览

Try comparing the value of the column to the DBNull.Value value to filter and manage null values in whatever way you see fit.

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


If you want to check if a null value exists in the table you can use this method:

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

which will let you write this:

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

You can loop throw the rows and columns, checking for nulls, keeping track of whether there's a null with a bool, then check it after looping through the table and handle it.

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

You can also come out of the foreach loop with a break statement e.g.

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

To save looping through the rest of the table.

I will do like....

(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["Column_Name"] == DBNull.Value)
{
//Do something
}
else
{
//Do something
}
}

You can null/blank/space Etc value using LinQ Use Following Query

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

Here Replace Columnname with table column name and "" your search item in above code we looking null value.

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

Usage:

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