Oracle输出参数强制转换- c#

本文关键字:转换 输出 参数 Oracle | 更新日期: 2023-09-27 18:10:49

我支持的旧应用程序出现问题。数据访问是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;

这在windows XP 9版本上是可以的。. x的ODP。net。在最新版本的Windows 7机器上,强制转换失败,参数的返回数据类型是Decimal,尽管显式声明为Int64。在我看来,这像是ODP . net新版本中的一个bug/奇怪的行为。是否有一个解决方案或我可以做的事情来解决这个问题,最好不改变我的代码?

谢谢!

Oracle输出参数强制转换- c#

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

似乎有一个细微的变化影响了Oracle数据类型的处理方式。快速修复是做双强制转换(长)((OracleDecimal)opId.Value)。