在ac#程序中使用OracleDataReader
(Oracle.DataAccess.Client
)从记录集中读取数据时,其中一个字段中的数据类型可能会因行而异({{{ 1}})。
我正在考虑这样的情况,例如select使用case语句,该case语句可以返回来自数字(9)的列的值或来自定义为数字(14)的列的值。
当在数据读取器上使用索引器时向上转换返回的值时,是否还有其他可能相关的问题,例如DBNull
(处理DBNull除外)
答案 0 :(得分:1)
AFAIK,数据类型不会逐行变化。
如果查询使用返回不同数据类型值的case语句,则引擎负责为所有数据类型选择最适合保留的值,并且它将使用该数据类型描述结果集,作为标准强制在任何结果集中每列使用一种数据类型。
无论如何,如果您不能信任/知道查询的来源,请在try / catch语句中包围您的演员,以获得任何意外结果并采取相应行动。
答案 1 :(得分:0)
结果集中的每一列都具有相同的数据类型和长度/大小/精度。 JDBC连接
使用JDBC,实际上可以从result set metadata获取这些。不确定是否有C#
的等价物一个奇怪的是一个非常特殊的用户定义类型,称为SYS.ANYTYPE,它主要在内部用于复制。结果集中可以有一行包含一列。列的数据类型为SYS.ANYTYPE,但内部可以有日期值,而另一个有数字,最后一个有字符。有一些特殊的包用于确定任何ANYTYPE值中隐藏的内容。