将DBNULL值解析为double

时间:2016-05-13 05:52:54

标签: c# sql parsing dbnull formatexception

我使用以下行将datarow值转换为double。

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

如果datarowDBNULL,我将收到以下异常:

  

' double.Parse(Convert.ToString(数据))'抛出' System.FormatException'

类型的例外

如何在不使用tryparse.

的情况下处理此问题

3 个答案:

答案 0 :(得分:4)

另一种方法是检查DBNull是否为double d = datarow is DBNull ? 0 : double.Parse(Convert.ToString(datarow));

DBNull.Value

这样,您无需检查<body oncontextmenu="return false;">

答案 1 :(得分:3)

DBNull无法转换或解析为double(或intdecimal等),因此您必须检查datarow是否为DBNull在尝试解析它之前doubleValue = datarow == DBNull.Value ? 0.0 : double.Parse(Convert.ToString(datarow)); 。它应该是使用三元运算符的oneliner:

powershell -Command "gci c:\test -recurse |% { $_.fullname +' '+ $($_|get-acl|select -expand owner).Split('\')[1]}

答案 2 :(得分: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进行字符串转换,并执行其他一些操作,例如规范化小数符号等,以实现最佳格式容差。

当然可以通过捕获FormatException之类的特定异常类型来改进general catch子句,但是根据我的需要,它可以很好地工作。