【问题标题】:DBNull issue with Oracle 11g ODP.Net providerOracle 11g ODP.Net 提供程序的 DBNull 问题
【发布时间】:2010-06-09 08:46:04
【问题描述】:

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

【问题讨论】:

  • 那么...问题是什么?除了“检查DBNullnull 的值”之外,您是否希望有人说什么?

标签: oracle11g odp.net


【解决方案1】:

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

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               

在本文档中 症状 变化 原因 解决方案

适用于: 适用于 .NET 的 Oracle 数据提供程序 - 版本:10.2.0.2.20 至 11.1.0.7.10 微软视窗(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 用于 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 类型继承了 INullable 接口。

【讨论】:

  • 谢谢!刚刚将一个旧的 .NET 站点更新到 4.7,这让我很头疼。对于VB倾向:If Not CType(cmd.Parameters("paramName")?.Value, INullable).IsNull Then
【解决方案2】:

在 Oracle 发布的重大更改之后(请参阅下面的评论)。您需要在下面添加额外的位:

if (oraParam[7] == null || 
    oraParam[7].Value == DBNull.Value ||
    ((INullable)oraParam[7].Value).IsNull)

INullable 位于 Oracle.DataAccess.Types 命名空间中。

【讨论】:

    【解决方案3】:

    或者你可以试试……

    (OracleString)result == OracleString.Null
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多