2016-05-13 130 views
1

我使用以下行將datarow值轉換爲double值。將DBNULL值解析爲雙精度值

double.parse(Convert.ToString(datarow)); 

如果datarowDBNULL,我得到以下異常:

'double.Parse(Convert.ToString(數據))' 扔類型'System.FormatException' 的例外

如何處理這一個不使用tryparse.

+0

確保沒有爲DBNull。你在用什麼服務器? –

+0

請參閱參考http://www.w3schools.com/sql/sql_isnull.asp,使用SQL檢查空值的方法。 –

+0

你想要發生什麼? –

回答

4

另一種方法是,以檢查是否datarowDBNull

double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow)); 

這樣,你不需要檢查DBNull.Value

在查詢
3

DBNull不能轉換或解析爲double(或intdecimal等),所以你必須檢查是否datarowDBNull試圖解析它。它應該是使用三元運算符一個oneliner:類似於此

doubleValue = datarow == DBNull.Value ? 0.0 : double.Parse(Convert.ToString(datarow)); 
+0

可能括號以不同的順序 –

+0

錯誤是結果必須分配給一個變量 – Breeze

3

我有一堆的轉換實用方法用於這種情況中,在格式。

// tries to convert a general object to double, if a defaultValue is provided, it will silently fall back to it, if not, it will throw exceptions 
public static double ToDouble(object obj, double? defaultValue = null) { 
    if (obj == null || obj == "" || obj == DBNull.Value) return 0.0; 
    try { 
    if (obj is string) 
     return double.Parse((string)obj); 
    return Convert.ToDouble(obj); 
    } catch { 
    if (defaultValue != null) return defaultValue.Value; 
    throw; 
    } 
} 

我用這種弱到強類型轉換工具大多是當我和ADO.NET的東西,或其它弱類型接口的工作,像從Excel中讀取數據的例子。

在我的真實代碼中,我還允許通過CultureInfo進行字符串轉換,並執行其他一些操作,如標準化小數點符號等以實現最佳格式容差。

通用catch子句可以通過捕獲特定的異常類型(如FormatException)得到改進,但爲了我的需要,它可以很好地工作。