OracleDataReader
(Oracle.DataAccess.Client
)をac#プログラムで使用してレコードセットからデータを読み取ると、いずれかのフィールドのデータ型が行から行(DBNull
を除く)。OracleDatareader使用時にフィールド・データ型を行から列に変更することができます
私は、selectが数値(9)である列の値または数値(14)として定義された列の値を返すことができるcase文を使用するような状況を考えています。
データリーダーでインデクサーを使用しているときに返される値をアップキャストするときに関連する可能性のあるその他の問題がありますか? int cityId = (int)dataReader["CityId"];
(DBNullの処理を除く)
行ごとにデータ型が変化しないのは、一般的に私が思ったことです。しかし、ヌルになる可能性のある数字(9)を考えてみましょう。ある行の値は、その行のデータ型がintになるように.netに設定されます。別の行の場合、値はNULLであり、その行のデータ型はSystem.DBNullになります。したがって、.net側のdbから来る値の表現は、異なるデータ型intまたはDBNullを持つことができます。だから技術的にデータ型がintまたはDBNullのいずれかになりうるのであれば、技術的には別のものになる可能性もあります。 –
@Phil Carson - あなたはここで '値'と 'タイプ'を混同していると思います。特定の行がその列の値に対してNULLを戻すとき、それは値です - 列は型を変更しませんでした。行が特定の列に対して9を返すのと同じように、型ではなく値を戻します。列はINTまたはSMALLINT、またはBIGINTですが、値は9です。同様に、*値*はNULLでもかまいませんが、列はその型を保持します。 .NETは、値をCLR型にマップするために、いくつかの "under the hood"の作業を実行し、NULL値用の特別なロジックを持っています。これは混乱の原因となっている可能性があります。 – JeremyDWill