2013-04-25 48 views
0

对于我支持的旧应用程序有问题。数据访问是CSLA .Net,并且有一行用来自out参数的值更新新创建的实体id。这在数据库中定义为NUMERIC(10,0)。代码如下所示:Oracle输出参数cast - c#

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中的一个错误/奇怪的行为。有没有解决办法或我可以做什么来解决这个问题,最好不用改变我的代码?

谢谢!

+0

为什么不使用'Convert.ToInt64'代替,这将处理这两种情况:http://msdn.microsoft.com/en-us/library/0c5w856c.aspx – 2013-04-25 19:48:10

+0

我可能会最终使用它,谢谢!我试图避免修改该代码,因为它看起来像是由工具生成的。尽管在这一点上看起来没有人拥有这个项目,所以我可能只是把它拿过来并把它们清理干净。 – 2013-04-25 20:33:35

+0

Convert.ToInt64失败,并显示无效的转换异常unfortunatley。 无法转换类型为'Oracle.DataAccess.Types.OracleDecimal'的对象以键入'System.IConvertible'。 我不知道为什么一个声明为Int64的参数从数据库返回一个Decimal值。我可以看到参数类型为Int64,但返回值为十进制。 – 2013-04-26 16:47:36

回答