0

我支持的旧应用程序有问题。数据访问是 CSLA .Net 并且有一行使用 out 参数中的值更新新创建的实体 id。这在数据库中定义为 NUMERIC(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;

这在带有 ODP .Net 版本 9.x 的 Windows XP 上曾经很好。在最新版本的 Windows 7 机器上,强制转换失败并且参数的返回数据类型是 Decimal,尽管被明确声明为 Int64。在我看来,这就像新版本 ODP .Net 中的错误/奇怪行为。是否有解决方法或我可以做些什么来解决这个问题,最好不要更改我的代码?

谢谢!

4

1 回答 1

1

这个问题在 Oracle 论坛上有更详细的说明:https ://forums.oracle.com/forums/thread.jspa?threadID=406872 ;

似乎有一个细微的变化会影响 Oracle 数据类型的处理方式。快速修复是执行双重转换 (long)((OracleDecimal)opId.Value)。

于 2013-04-30T14:53:23.320 回答