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)
谢谢
这与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)