- ベストアンサー
oleDBでnumeric形式の小数部分の取得は?
DBにはpostgresを使用していて、numeric(8,2)の様に定義した項目から VB.netのプログラムでOleDbDataReaderを使用して値を読み取るのですが .GetValueでは123.45 -> 123 という風に整数部分しか読み取れません。 試しに .GetValue(x).Tostringで出力してみたのですが、やはり小数部分が見あたりません。 直接コマンドで見る限り、テーブルには正しく小数以下も格納されています。 現在は、クエリで 100倍して.GetValueで読み込んだ後に100で割っていますが 直接読み込むメソッドがありましたらご教授願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
.NETについては分かりませんが、SQL中で演算する必要がないなら、SQL中で文字に型変換してしまって、文字で受け取るといった方法もあります。 select c1,c2 from t1 [where ・・・] といったselect文で、例えばc2列がnumeric(8,2)であるなら、 select c1,to_char(c2,'S999999.99') as c2 from t1 [where ・・・]
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
OleDbDataReader.GetDecimal メソッドを使ったらどうなりますか。 http://msdn.microsoft.com/ja-jp/library/system.data.oledb.oledbdatareader.getdecimal%28v=vs.71%29.aspx
お礼
折角、ご回答頂いたのにお返事が遅れてすみません。 ご意見を参考に色々と試してみました。 わかったことは、numericとdecimalは同じ扱いらしいのですが、numericで宣言した物を decimalで読み込もうとするとエラーになりました。 改めて、decimalで定義を行って、型エラーというメッセージはでなくなったのですが、結局は整数として小数部分がうまくとれませんでした。 (私が何か根本的な勘違いをしているだけなのかも知れませんが) アドバイスに感謝します。
お礼
文字→数値変換の手間やクエリの煩雑化を避けたかったのですが こちらの方法は動作を確認できましたのでベストアンサーとさせていただきます。 有り難うございました。 それからお礼が大変遅くなりましたことお詫びします。