Может ли тип данных поля меняться от строки к строке при использовании OracleDatareader - PullRequest
2 голосов
/ 03 февраля 2011

При использовании OracleDataReader (Oracle.DataAccess.Client) в программе ac # для чтения данных из набора записей возможны ситуации, когда тип данных в одном из полей может меняться от строки к строке (кроме DBNull).

Я имею в виду такие ситуации, когда выбор использует оператор case, который может возвращать либо значение из столбца, который является числом (9), либо значение из столбца, который определяется как число (14).

Существуют ли другие ошибки, которые могут иметь значение при приведении значения, возвращаемого при использовании индексатора в считывателе данных, например, int cityId = (int)dataReader["CityId"]; (кроме обработки DBNull)

Ответы [ 2 ]

1 голос
/ 03 февраля 2011

AFAIK, тип данных не меняется построчно.

Если в запросе используется оператор case, который возвращает значения из разных типов данных, механизм отвечает за выбор наиболее подходящего для хранения значений для всех, и он будет описывать набор результатов с использованием этого типа данных в качестве стандарта. заставляет использовать один тип данных на столбец в любом наборе результатов.

В любом случае, если вы не можете доверять / не знать источника запроса, окружите свое приведение в предложении try / catch, чтобы получить какой-либо неожиданный результат и действуйте соответственно.

0 голосов
/ 03 февраля 2011

Каждый столбец в наборе результатов будет иметь одинаковый тип данных и длину / размер / точность. JDBC-соединения

Используя JDBC, они могут быть получены из метаданных набора результатов . Не уверен, есть ли эквивалент для C #

Одна странность - это очень специальный пользовательский тип, называемый SYS.ANYTYPE, который в основном используется для репликации. Вы можете иметь три строки в наборе результатов с одним столбцом. Тип данных столбца будет SYS.ANYTYPE, но внутренне один может иметь значение даты, в то время как другой имеет номер, а последний имеет символ. Существуют специальные пакеты для определения того, что скрыто внутри любого значения ANYTYPE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...