检查数据集中的空值

时间:2015-07-22 08:02:15

标签: c#

我想检查所有数据集的空值并替换它们。 为了做到这一点,我写了这段代码:

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

但它不起作用!问题出在哪儿? 如果有更好的方式我真的很感激让我知道。 谢谢。

更新 但它不起作用!仍然在数据集中有空值。

2 个答案:

答案 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?