2011-06-21 4 views
1

これはわかりません。以下のコードは、sqlplusで同じsqlを実行しても正しい値を取得しても、常にゼロを返します。 10gからOracle 11gにアップグレードしました。コードは10gで機能しました。地球上で何が起こっているのだろうか?OracleDataReaderが間違った値を返します

_Sql = "SELECT Count(ObjectId) FROM AOR_MV_DEV WHERE CASE_NUMBER = 'S101-118'"; 
OracleCommand _Cmd = new OracleCommand(_Sql, _Cnxn); 
_Cmd.CommandText = _Sql; 
_reader = _Cmd.ExecuteReader(); 
_reader.Read(); 
vColumnValue = _reader.GetDecimal(0); 
+0

私が思い出したように、Oracleのcount()関数は、整数ではなく、.NETの10進数(またはおそらくは2倍)の値に変換されます。問題はありませんが、デバッグと呼び出し'_reader [0]'は返された真の型が何であるかを調べます。 –

+0

あなたは正しいです。私はDecimalを元々持っていましたが、intに変更して問題を修正できるかどうかを確認し、コードを投稿したときにそれを変更するのを忘れました。私はコードを更新します。ありがとう。 – Shawn

答えて

3

まず、実行している.NETのバージョンに適切なデータプロバイダを使用していることを確認してください。それが最も可能性の高い原因です。

その他のアイデア:

は、ExecuteScalarの代わりのExecuteReaderを使用してみてください。

デュアルから1を選択してみてください:デュアルから1を選択してください。その結果が1かどうかを確認してください。次にデュアルからcount(1)を選択して、1になったら参照してください。

コマンドを作成するときにcmd.CommandTextを設定しているので、このコマンドは必要ありません。

また、スキーマ名で表名を修飾する必要があります。

+0

答えを更新して正しい.Netライブラリに焦点を合わせるなら、私はあなたの答えを受け入れるでしょう。それはOracle 11gと.Net 3.5 System.Data.OracleClientがうまく一緒に再生されないようです。私はOracle.DataAccess.Clientに切り替えて、問題を解決しました。ありがとう。 – Shawn