2009-06-25 7 views
13

に、Oracle10gデータベースのselect * fromテーブルの結果を入力しようとすると、C#.net 2(Visual Studio 2005 SP1)で作業しています。 .netフレームワーク、IDEおよびデータベースはこのクライアントサイトでを変更できません。ODP.netデータセットを塗りつぶすときのOracle Decimal Numberの精度の問題。例外:算術演算のオーバーフローが発生しました

算術演算をもたらした:私はODP.netプロバイダを使用して接続してい

は、私はフィルコマンドを実行するとDLLのバージョンは、2.102.2.20

である私は例外を取得しますオーバーフローする

また、Visual Studioデザイナー(表示テーブルデータ)で問題の列を表示しようとすると、私は evテーブル内のこの列の行を削除します。このコードは、クエリで整数などの他の列を選択すると(たとえば、この列を省略した場合)、完全に機能します。それはモンテカルロシミュレーションに必要だとして

919.742866695572

は私が 精度が必要:私はヒキガエルからデータベースにそれを表示するときに問題になっている列が正常に見える

は、データは次のようになります。

データアダプタを使用してデータテーブルを埋めるのではなく、datareaderを使用してdataReader.getValue(columnIndex)を呼び出すと、同じエラーが発生しますが、dataReader.GetOracleDecimal(columnIndex)を呼び出すと、エラーなし。

データアダプターを使用してデータセットを埋め込むことになります(これらは、oracle dbから自動生成される強力な型指定のデータセットを取得できないため、型なしのデータセットです)。私はdatareaderを使用して結果を歩き回りたくない(列の値を選ぶ)ので、列の数、特定の列を必要とする小数点の列のインデックスに関係なく、多くのシナリオで動作する汎用メソッドとして記述しようとしています。データ型で呼び出しを取得します。

誰でも手助けできますか? 新しいバージョンのODP.net dllを使用して、古いバージョンのOracle10gデータベースに接続できますか?これが助けになるのだろうかと思っています。

ありがとうございました

+0

ODP.netのバージョンを11gに変更しています(Oracle.DataAccess.dll 2.111.6。20)が助けにならなかったので、算術演算でオーバーフロー例外が発生しました。これを実行するための一つの解決策であるが理想的ではないです: 表 しかし、これはセルの書式設定に影響を与える場合は、Excelにので、私はわからないんだから、今の私のDataColumnの種類が異なっている、私はこのデータを書き込むFROM SELECT TO_CHAR(offendingColumn) 同じように。 – m3ntat

+0

また、私はテーブルの各列について知っておく必要があることを意味する私はブランケットを行うことはできません選択*表から – m3ntat

答えて

0

You can try the latest version of ODP.Net (11g)です。下位互換性があります。私はそれを使って10gデータベースに接続します。私はVS 2005でもうまくいくはずだと思います。 Clickonceを展開する場合は、この質問で参照されるDLLを追加してください:What is the minimum client footprint required to connect C# to an Oracle database?重要な注意点は、odp.netの最新バージョンをお持ちの場合、すべてのdllがインストールディレクトリに含まれていることです。インスタントクライアントを個別にダウンロードする必要はありません。それらを検索するだけです。

+0

偉大な私のコンピュータ上でこれをしようとすると私はどのように取得することができます。 デプロイされたマシンでも同様にインストールする必要がありますか?または、私は新しいバージョンのOracle.DataAccess.Dllを使用してコンソールアプリケーションをデプロイすることはできますか?それは私のアプリケーションのbinフォルダには、ターゲットの配備されたマシン(サーバー)上のインストールではなく、これに関係するものと、どのファイルが必要なの? ありがとうございます – m3ntat

+0

必要なすべてのDLLが含まれているVisual Studio用のOracle Developer Toolsが必要です。クライアントマシンにインストールする唯一の方法は、Oracle Bladeを完全にインストールする方法か、インスタントクライアントを使用する方法です(これは私が推奨します)。インスタントクライアントの場合は、.dllを見つけるだけで済みます(http://stackoverflow.com/questions/70602/what-is-the-minimum-client-footprint-required-to-connect-c-to-an- oracle-database)を参照して、コンテンツとしてコピーするように追加してください。これにより、適切に展開されます。 – jle

1

問題は、結果の値の精度が高すぎて、データ損失なしでSystem.Decimalに変換できないことです。私は許可された数字の正確な数を忘れていますが、約18ほどです。結果の値をその桁数に丸めてもかまいませんか?あなたが指定した例では、round(MyColumn, 15)程度で十分です。

関連する問題