检查数据集的空值

问题描述:

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

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

,但它不工作!哪里有问题? ,如果有更好的方法,我真的很感激,让我知道。 谢谢。

UPDATE 但它不工作!数据集中仍然有空值。

+1

什么不起作用?有没有例外? –

+3

“不起作用”不是有用的错误报告。它不会编译?运行它时会抛出异常吗?它是否留下空位?它是否将事物设置为“42”而不是您想要的值?提供更多细节,你更有可能获得帮助。 – Chris

+0

究竟哪些方法无效? –

如前所述当您运行

dataRow[dataDataColumn].GetType() 

你的dataRow[dataDataColumn]的价值,这始终是DBNull.valueGetType()。所以你总是得到类型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; 
} 

您正在使用DBNull.Value检查空值,请尝试对Null进行测试。

有DBNull.Value与空之间的区别就在这里What is the difference between null and System.DBNull.Value?

+1

谢谢。但与null相同的结果。 – David

+0

这不是问题所在。一个'null'值由'DataTable'中的'DBNull.Value'表示。 – sloth