Oracle 11g odp.net驱动程序发出Null值问题

Nav*_*thy 2 c# null dbnull odp.net oracle11g

我有问题比较空值与oracle 11g odp.net驱动程序.它适用于oracle 10g odp.net驱动程序.如果数据库中的列为null,则在datarow中,其字符串值为null.

此代码失败:

int parentId =  row[PARENTID] != DBNull.Value ? int.Parse(row[PARENTID].ToString()) : 0;
Run Code Online (Sandbox Code Playgroud)

谢谢

mar*_*dob 5

这与ORacle11g有关.就像你说的那样,它不是真正的空值,而是一个空字符串.如果从OracleDbType进行检查,OracleDbType和CLR数据类型中的null都从INullable继承,所以下面是我的解决方案:

((可以)rowParamDBType.Value).IsNull

要获得更清晰的解决方案,您可以将其放在扩展中.

如果您的行是DbType,则可以检查param.Value == DbNull.Value.


虽然上述方法也可行,但这个问题的真正解决方案是在OracleParameter声明中使用OracleDbTypeEx而不是OracleDbType.OracleDbTypeEx将返回值为DBType,因此它将识别DBNull.请参阅下面的示例代码

command.Parameters.Add(new OracleParameter
                            {
                                ParameterName = "param_out",
                                OracleDbTypeEx = OracleDbType.Decimal,
                                Direction = ParameterDirection.Output
                            });

if (command.Parameters["param_out"].Value != Convert.DBNull)
{
  //your code here
}
Run Code Online (Sandbox Code Playgroud)