Oracle输出参数cast-c#

Oracle输出参数cast-c#,c#,oracle,casting,odp.net,C#,Oracle,Casting,Odp.net,我支持的旧应用程序出现问题。数据访问是CSLA.Net,有一行用out参数的值更新新创建的实体id。这在数据库中定义为数字(10,0)。代码如下所示: OracleParameter opID = new OracleParameter("P_ID", OracleDbType.Int64); //... do some stuff and save the new entity to the db _id = (long)opID.Value; 在9.x版ODP.Net的WindowsXP上

我支持的旧应用程序出现问题。数据访问是CSLA.Net,有一行用out参数的值更新新创建的实体id。这在数据库中定义为数字(10,0)。代码如下所示:

OracleParameter opID = new OracleParameter("P_ID", OracleDbType.Int64);
//... do some stuff and save the new entity to the db
_id = (long)opID.Value;
在9.x版ODP.Net的WindowsXP上,这一点过去很好。在具有最新版本的Windows 7长方体上,强制转换失败,参数的返回数据类型为Decimal,尽管显式声明为Int64。在我看来,这就像新版ODP.Net中的一个bug/怪异行为。是否有一个变通方法或我可以做些什么来解决这个问题,最好不改变我的代码


谢谢

这个问题在这里的Oracle论坛上有进一步的详细介绍:


似乎有一点变化影响了Oracle数据类型的隐藏方式。快速修复方法是进行双转换(long)((OracleDecimal)opId.Value)。

为什么不使用
Convert.ToInt64
,这将处理这两种情况:我可能最终会使用它,谢谢!我试图避免修改代码,因为它看起来像是由工具生成的。尽管现在看来似乎没有人拥有这个项目的所有权,所以我还是干脆接管它,把事情弄清楚一点。Convert.ToInt64失败了,不幸的是出现了无效的强制转换异常。无法将“Oracle.DataAccess.Types.OracleDecimal”类型的对象强制转换为“System.IConvertible”类型。我不明白为什么声明为Int64的参数会从数据库返回十进制值。我可以看到参数类型为Int64,但返回的值是Decimal。