检查数据表中是不是包含空值的最佳方法
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<DataRow>()
【参考方案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!")
【讨论】:
以上是关于检查数据表中是不是包含空值的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
用python.检查“影片名称”字段为空值的+数据,给该字段填充数+据"unnamed"?