【发布时间】:2011-06-04 00:21:59
【问题描述】:
检查数据表中是否包含空值的最佳方法是什么?
在我们的场景中,大多数情况下,一列将包含所有空值。
(此数据表由第 3 方应用程序返回 - 我们正在尝试在我们的应用程序处理数据表之前进行验证)
【问题讨论】:
标签: c# .net validation datatable null
检查数据表中是否包含空值的最佳方法是什么?
在我们的场景中,大多数情况下,一列将包含所有空值。
(此数据表由第 3 方应用程序返回 - 我们正在尝试在我们的应用程序处理数据表之前进行验证)
【问题讨论】:
标签: c# .net validation datatable null
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");
【讨论】:
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
if (dr["Column_Name"] == DBNull.Value)
{
//Do something
}
else
{
//Do something
}
}
【讨论】:
您可以使用 LinQ 为空/空白/空格等值 使用以下查询
var BlankValueRows = (from dr1 in Dt.AsEnumerable()
where dr1["Columnname"].ToString() == ""
|| dr1["Columnname"].ToString() == ""
|| dr1["Columnname"].ToString() == ""
select Columnname);
这里将 Columnname 替换为表列名和 "" 您在上面的代码中的搜索项,我们查找空值。
【讨论】:
我会喜欢的......
(!DBNull.Value.Equals(dataSet.Tables[6].Rows[0]["_id"]))
【讨论】:
尝试将该列的值与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();
【讨论】:
table.AsEnumerable()而不是table.Rows.OfType<DataRow>()
你可以循环抛出行和列,检查空值,用布尔值跟踪是否有空值,然后在循环遍历表后检查并处理它。
//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;
}
保存循环遍历表格的其余部分。
【讨论】:
foreach(DataRow row in dataTable.Rows)
{
if(row.IsNull("myColumn"))
throw new Exception("Empty value!")
}
【讨论】: