Oracle out参数强制转换 - c#

时间:2013-04-25 15:48:56

标签: c# oracle casting odp.net

我支持旧应用程序的问题。数据访问是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中的错误/怪异行为。是否有解决方法或我可以做些什么来解决问题,最好不要更改我的代码?

谢谢!

1 个答案:

答案 0 :(得分:1)

此问题在Oracle论坛中进一步详细说明:https://forums.oracle.com/forums/thread.jspa?threadID=406872;

似乎有一些细微的变化会影响Oracle数据类型的呈现方式。快速解决方法是进行双重转换(长)((OracleDecimal)opId.Value)。