2011-02-02 50 views
2

在ac#程序中使用OracleDataReaderOracle.DataAccess.Client)從記錄集中讀取數據時是否存在任何其中一個字段中的數據類型可能會從行更改爲行(除DBNull)。當使用OracleDatareader時,行數據類型是否可以逐行更改

我想到的情況像是select使用case語句,可以返回一個數字列中的值(9)或來自定義爲數字(14)的列的值。

在使用數據讀取器上的索引器時返回的值上傳時,是否還有其他可能相關的問題,例如: int cityId = (int)dataReader["CityId"];(除處理的DBNull)

回答

0

結果集中的每一列將具有相同的數據類型和長度/大小/精度。 JDBC連接

使用JDBC,這些實際上可以從result set metadata獲得。不知道是否有一個等效的C#

一個古怪是其中大部分是用於內部複製一個非常特殊的用戶定義類型,稱爲SYS.ANYTYPE。您可以在一列結果中包含三行。列的數據類型爲SYS.ANYTYPE,但內部可以有一個日期值,而另一個有一個數字,最後有一個字符。有些特殊的軟件包可以確定任何ANYTYPE值中隱藏的內容。

1

AFAIK,數據類型不上逐行基礎改變。

如果查詢使用返回來自不同數據類型的值的case語句,引擎將負責選擇最適合於保存所有值的值,並將使用該數據類型描述結果集,如標準強制在任何結果集中爲每列使用一種數據類型。

無論如何,如果你不能信任/知道查詢的來源,環繞你在一個try/catch句子投得到任何意外的結果,並採取相應的行動。

+0

數據類型在行的基礎上不改變是我通常想到的。但是,然後考慮一個可以爲空的數字(9)。對於一行,該值可以設置爲.net,該行的數據類型將爲int。對於另一行,該值可能爲空,該行的數據類型將爲System.DBNull。因此,這證明了來自.net端數據庫的值的表示可以具有不同的數據類型int或DBNull。所以這讓我想,如果技術上數據類型可能是int或DBNull,那麼從技術上講甚至可能是其他的東西。 – 2011-02-03 00:59:03

相關問題