加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长百科 > 正文

oracle11g – Oracle 11g ODP.Net提供程序的DBNull问题

发布时间:2021-03-05 03:17:10 所属栏目:站长百科 来源:网络整理
导读:我们在检查“DBNull”的输出参数时遇到问题. Oracle存储过程或函数返回的“DBNull”值被oracle 11g客户端/ ODP.Net提供程序视为“null”字符串.这适用于oracle 10g客户端,因为它返回“DBNull”. 因此,我们所有的“DBNull”检查都失败了 解决方法 当值为NULL

我们在检查“DBNull”的输出参数时遇到问题. Oracle存储过程或函数返回的“DBNull”值被oracle 11g客户端/ ODP.Net提供程序视为“null”字符串.这适用于oracle 10g客户端,因为它返回“DBNull”.
因此,我们所有的“DBNull”检查都失败了

解决方法

当值为NULL时,ODP.NET返回“NULL”字符串[ID 968857.1]

Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED

在本文件中
症状
变化
原因

适用于:
Oracle Data Provider for .NET – 版本:10.2.0.2.20到11.1.0.7.10
Microsoft Windows(32位)
Microsoft Windows x64(64位)

症状
从以前版本的Oracle Data Provider for .NET迁移后,可能会发生与检索到的空值相关的行为更改.虽然应用程序先前返回了一个空字符串,但现在获得一个值为“null”的字符串.
变化
从1.x ODP.NET迁移到2.x ODP.NET

原因
该行为是由于从1.x Oracle Data Provider for .NET迁移到2.x提供程序. 2.x ADO.NET支持提供程序返回提供程序特定类型的能力,这是从.NET 1.x到2.x的潜在“重大变化”之一.

ODP.NET版本9.2.x,10.1.x,10.2.0.1.0都是1.x框架提供程序.通常,在从早期版本ODP迁移到较新版本的ODP时会注意到此行为,但同时从1.x提供程序切换到2.x提供程序.这是.NET框架支持的变化,而不是导致此行为的Oracle客户端版本的更改.

在将应用程序迁移到64位操作系统时,也可能会注意到此行为,因为没有1.x 64位框架.


若要解决此问题,将需要修改代码.

作为一种解决方法,使用ODP.NET for 1.x(例如1.111.7.0而不是2.111.7.0)将导致先前的行为,但请注意1.x提供程序未在其他任何版本的框架上进行测试或支持超过1.x,并且不计划对11.1.0.7.0以后的任何版本支持1.x.

如果操作系统是64位,则需要强制应用程序在SYSWOW64子系统下运行(即32位),以便使用1.x ODP.NET.

要更正代码:

如果值是DbType,则可以检查param.Value == DbNull.Value

如果值是OracleDbType,则可以检查((INullable)param.Value).IsNull,因为Oracle Types继承了INullable接口.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读