Oracle 11g odp.net 驱动程序存在 Null 值问题
我在将 null 值与 oracle 11g odp.net 驱动程序进行比较时遇到问题。它与 oracle 10g odp.net 驱动程序配合良好。如果数据库中的列为 null,则在 datarow 中它的字符串值为 null
。
此代码失败:
int parentId = row[PARENTID] != DBNull.Value ? int.Parse(row[PARENTID].ToString()) : 0;
谢谢
I am having issues comparing null values with oracle 11g odp.net driver. It works fine with oracle 10g odp.net driver. If a column is null in the database, then in datarow it has a string value of null
.
This code fails:
int parentId = row[PARENTID] != DBNull.Value ? int.Parse(row[PARENTID].ToString()) : 0;
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这和ORacle11g有关系。
就像你所说的,它不是真正的空值,而是一个空字符串。
如果您从 OracleDbType 进行检查,OracleDbType 和 CLR Datatype 中的 null 都继承自 INullable,因此下面是我的解决方案:
要获得更清晰的解决方案,您可以将其放在扩展中。
如果您的行是 DbType,则可以检查 param.Value==DbNull.Value。
虽然上面的方法也可以工作,但此问题的真正解决方案是在 OracleParameter 声明中使用 OracleDbTypeEx 而不是 OracleDbType。 OracleDbTypeEx 会将值返回给 DBType,因此它将识别 DBNull。请参阅下面的示例代码。
This has something to do with the ORacle11g.
Like what you said, instead of real null value, it is a null string.
If you are checking from OracleDbType, the null in OracleDbType and CLR Datatype both inherits from INullable so below was my solution:
To have a cleaner solution, you can place this in extension.
If your row is a DbType, you can check for param.Value==DbNull.Value.
While the above will work too, the real solution to this problem is use the OracleDbTypeEx instead of OracleDbType in your OracleParameter declaration. OracleDbTypeEx will return the value to DBType and because of this it will recognize the DBNull. See example code below.
这里 :
Here :
来自 Oracle 文档:
如果值是 DbType,则可以检查 param.Value==DbNull.Value
如果值是 OracleDbType,则可以检查 ((INullable)param.Value).IsNull,因为 Oracle 类型继承 INullable界面。
Fromm the Oracle documentation:
f the value is a DbType, you can check for param.Value==DbNull.Value
If the value is an OracleDbType, you can check for ((INullable)param.Value).IsNull since Oracle Types inherit INullable interface.