Reputation: 10700
what is the best way to check if a Data Table has a null value in it ?
Most of the time in our scenario, one column will have all null values.
(This datatable is returned by a 3rd party application - we are trying to put a valiadation before our application processes the data-table)
Upvotes: 103
Views: 339404
Reputation: 9624
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");
Upvotes: 1
Reputation: 21
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["Column_Name"] == DBNull.Value)
{
//Do something
}
else
{
//Do something
}
}
Upvotes: 2
Reputation: 11
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.
Upvotes: 0
Reputation: 71
I will do like....
(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
Upvotes: 1
Reputation: 63522
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();
Upvotes: 191
Reputation: 10850
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.
Upvotes: 14
Reputation: 745
foreach(DataRow row in dataTable.Rows)
{
if(row.IsNull("myColumn"))
throw new Exception("Empty value!")
}
Upvotes: 24