使用OracleDatareader时,字段数据类型是否可以在行之间更改

时间:2011-02-02 23:47:53

标签: c# oracle ado.net plsql

在ac#程序中使用OracleDataReaderOracle.DataAccess.Client)从记录集中读取数据时,其中一个字段中的数据类型可能会因行而异({{{ 1}})。

我正在考虑这样的情况,例如select使用case语句,该case语句可以返回来自数字(9)的列的值或来自定义为数字(14)的列的值。

当在数据读取器上使用索引器时向上转换返回的值时,是否还有其他可能相关的问题,例如DBNull(处理DBNull除外)

2 个答案:

答案 0 :(得分:1)

AFAIK,数据类型不会逐行变化。

如果查询使用返回不同数据类型值的case语句,则引擎负责为所有数据类型选择最适合保留的值,并且它将使用该数据类型描述结果集,作为标准强制在任何结果集中每列使用一种数据类型。

无论如何,如果您不能信任/知道查询的来源,请在try / catch语句中包围您的演员,以获得任何意外结果并采取相应行动。

答案 1 :(得分:0)

结果集中的每一列都具有相同的数据类型和长度/大小/精度。 JDBC连接

使用JDBC,实际上可以从result set metadata获取这些。不确定是否有C#

的等价物

一个奇怪的是一个非常特殊的用户定义类型,称为SYS.ANYTYPE,它主要在内部用于复制。结果集中可以有一行包含一列。列的数据类型为SYS.ANYTYPE,但内部可以有日期值,而另一个有数字,最后一个有字符。有一些特殊的包用于确定任何ANYTYPE值中隐藏的内容。