将DBNULL值解析为双精度值
我使用以下行将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检查空值的方法。 –
你想要发生什么? –