我想检查所有数据集的空值并替换它们。 为了做到这一点,我写了这段代码:
public static DataSet Validator(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataDataColumn in dataTable.Columns)
if (dataRow[dataDataColumn] == DBNull.Value)
{
if (dataRow[dataDataColumn].GetType() == typeof(string))
dataRow[dataDataColumn] = "";
else if (dataRow[dataDataColumn].GetType() == typeof(DateTime))
dataRow[dataDataColumn] = DateTime.MinValue;
else if (dataRow[dataDataColumn].GetType() == typeof(int) ||
dataRow[dataDataColumn].GetType() == typeof(short) ||
dataRow[dataDataColumn].GetType() == typeof(long) ||
dataRow[dataDataColumn].GetType() == typeof(float) ||
dataRow[dataDataColumn].GetType() == typeof(byte) ||
dataRow[dataDataColumn].GetType() == typeof(double))
dataRow[dataDataColumn] = 0;
}
return dataSet;
}
但它不起作用!问题出在哪儿? 如果有更好的方式我真的很感激让我知道。 谢谢。
更新 但它不起作用!仍然在数据集中有空值。
答案 0 :(得分:4)
运行时
dataRow[dataDataColumn].GetType()
您对GetType()
的值dataRow[dataDataColumn]
致电,DBNull.value
始终为DBNull
。所以你总是得到类型dataDataColumn.DataType
。
检查public static DataSet Validator(DataSet dataSet)
{
foreach (DataTable dataTable in dataSet.Tables)
foreach (DataRow dataRow in dataTable.Rows)
foreach (DataColumn dataDataColumn in dataTable.Columns)
if (dataRow.IsNull(dataDataColumn))
dataRow[dataDataColumn] = GetDefaultValue(dataDataColumn.DataType);
return dataSet;
}
static object GetDefaultValue(Type t)
{
// get the default value for value types
if (t.IsValueType)
return Activator.CreateInstance(t);
// in case of a string, we want an empty one instead of null
if (t == typeof(string))
return String.Empty;
return null;
}
,它将返回列的实际数据类型。
您可以使用以下内容:
sed -i -ne '/2015-07-07 11:23:33,006/ {p; r replaced_time_search.txt' -e ':a; n; /2015-07-07 15:00:33,008/ {p; b}; ba}; p' logs/new_test.log
答案 1 :(得分:2)
您正在使用DBNull.Value检查空值,尝试对Null进行测试。
如前所述,DBNull.Value和Null之间存在差异What is the difference between null and System.DBNull.Value?