将DBNULL值解析为双精度值

问题描述:

我使用以下行将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

你想要发生什么? –

另一种方法是,以检查是否datarowDBNull

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

这样,你不需要检查DBNull.Value

在查询

DBNull不能转换或解析为double(或intdecimal等),所以你必须检查是否datarowDBNull试图解析它。它应该是使用三元运算符一个oneliner:类似于此

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

可能括号以不同的顺序 –

+0

错误是结果必须分配给一个变量 – 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)得到改进,但为了我的需要,它可以很好地工作。