我使用以下行將datarow
值轉換爲double值。將DBNULL值解析爲雙精度值
double.parse(Convert.ToString(datarow));
如果datarow
爲DBNULL
,我得到以下異常:
'double.Parse(Convert.ToString(數據))' 扔類型'System.FormatException' 的例外
如何處理這一個不使用tryparse.
我使用以下行將datarow
值轉換爲double值。將DBNULL值解析爲雙精度值
double.parse(Convert.ToString(datarow));
如果datarow
爲DBNULL
,我得到以下異常:
'double.Parse(Convert.ToString(數據))' 扔類型'System.FormatException' 的例外
如何處理這一個不使用tryparse.
另一種方法是,以檢查是否datarow
爲DBNull
:
double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));
這樣,你不需要檢查DBNull.Value
DBNull
不能轉換或解析爲double
(或int
,decimal
等),所以你必須檢查是否datarow
是DBNull
試圖解析它。它應該是使用三元運算符一個oneliner:類似於此
doubleValue = datarow == DBNull.Value ? 0.0 : double.Parse(Convert.ToString(datarow));
可能括號以不同的順序 –
錯誤是結果必須分配給一個變量 – Breeze
我有一堆的轉換實用方法用於這種情況中,在格式。
// 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
)得到改進,但爲了我的需要,它可以很好地工作。
確保沒有爲DBNull。你在用什麼服務器? –
請參閱參考http://www.w3schools.com/sql/sql_isnull.asp,使用SQL檢查空值的方法。 –
你想要發生什麼? –