2015-07-22 105 views
0

我想檢查我的所有數據集爲空值並替換它們。 爲了做到這一點我寫了這個代碼:檢查數據集的空值

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

究竟哪些方法無效? –

回答

4

如前所述當您運行

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