Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle11g Oracle 11g ODP.Net提供程序的DBNull问题_Oracle11g_Odp.net - Fatal编程技术网

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

Oracle11g Oracle 11g ODP.Net提供程序的DBNull问题,oracle11g,odp.net,Oracle11g,Odp.net,我们在检查“DBNull”的输出参数时面临问题。Oracle存储过程或函数返回的“DBNull”值被Oracle 11g client/ODP.Net提供程序视为“null”字符串。这在oracle 10g客户端上运行良好,因为它返回“DBNull”。 正因为如此,在Oracle发布了突破性的更改之后,我们所有的“DBNull”检查都失败了(见下面的注释)。您需要在下面添加额外的位: if (oraParam[7] == null || oraParam[7].Value == DBN

我们在检查“DBNull”的输出参数时面临问题。Oracle存储过程或函数返回的“DBNull”值被Oracle 11g client/ODP.Net提供程序视为“null”字符串。这在oracle 10g客户端上运行良好,因为它返回“DBNull”。
正因为如此,在Oracle发布了突破性的更改之后,我们所有的“DBNull”检查都失败了(见下面的注释)。您需要在下面添加额外的位:

if (oraParam[7] == null || 
    oraParam[7].Value == DBNull.Value ||
    ((INullable)oraParam[7].Value).IsNull)
    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
INullable位于Oracle.DataAccess.Types命名空间中。

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

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
在本文件中 症状 变化 原因 解决方案

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
适用于: 用于.NET的Oracle数据提供程序-版本:10.2.0.2.20至11.1.0.7.10 Microsoft Windows(32位) Microsoft Windows x64(64位)

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
症状 从早期版本的Oracle Data Provider for.NET迁移后,检索的空值的行为可能会发生变化。虽然应用程序以前返回了一个空字符串,但现在获得了一个值为“null”的字符串。 变化 从1.x ODP.NET迁移到2.x ODP.NET

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
原因 此行为是由于从.NET的1.x Oracle数据提供程序迁移到2.x提供程序所致。2.x ADO.NET支持提供程序返回特定于提供程序的类型,这是从.NET 1.x到2.x的潜在“突破性更改”之一

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
ODP.NET版本9.2.x、10.1.x、10.2.0.1.0都是1.x框架提供程序。通常,当从早期版本的ODP迁移到较新版本的ODP时,会注意到这种行为,但同时会从1.x提供程序迁移到2.x提供程序。导致这种行为的是.NET framework支持的更改,而不是Oracle客户端版本的更改

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
在将应用程序迁移到64位操作系统时也可能会注意到这种行为,因为没有1.x 64位框架

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
解决方案 要解决此行为,需要修改代码

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
作为一种解决方法,使用ODP.NET for 1.x(例如1.111.7.0而不是2.111.7.0)将导致前面的行为,但请注意,1.x提供程序在除1.x之外的任何framework版本上都没有测试或支持,并且11.1.0.7.0之后的任何版本都不计划支持1.x

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
如果操作系统是64位的,则需要强制应用程序在SYSWOW64子系统(即32位)下运行,以便使用1.x ODP.NET

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
要更正代码,请执行以下操作: 如果该值是DbType,则可以检查param.value==DbNull.value

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
如果该值是OracleDbType,则可以检查((INullable)param.value)。IsNull,因为Oracle类型继承INullable接口。

或者您可以尝试

    Modified 04-JAN-2010 Type PROBLEM Status PUBLISHED               
(OracleString)result == OracleString.Null

所以问题是什么?除了“根据
DBNull
null
检查值”之外,您还希望有人说些什么吗?谢谢!刚刚将一个旧的.NET站点更新到4.7,这让我很头疼。对于VB:
如果不是CType(cmd.Parameters(“paramName”)?.Value,不可使用)。则为null