2013-04-25 49 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

回答