Oracle SQL Developer возвращает результаты даты и времени, отличные от OdbcDataAdapter - PullRequest
0 голосов
/ 16 ноября 2018

У нас есть задание на C #, которое запрашивает базу данных Oracle (версия 12.1.0.2) для объекта OdbcDataAdapter, например:

            using (OdbcConnection OdbcConn = source.GetOdbcConnection())
            {
                OdbcCommand cmd = new OdbcCommand(query, OdbcConn);
                cmd.CommandTimeout = 0;
                using (OdbcDataAdapter dAdapter = new OdbcDataAdapter(cmd))
                {
                    dAdapter.Fill(fileLoaded);
                }
            }

Запрос содержит это в select:

, TO_CHAR (DEL_DTTM, 'ГГГГ-ММ-ДД ЧЧ24: MI: SS') "Время доставки2"

Когда выполняется приведенный выше код, возвращается '2018-10-21 02:24:00'.Однако, когда тот же запрос выполняется в SQL Developer (редактор запросов Oracle), мы получаем «2018-10-21 03:24:00».

(Добавление дополнительных сведений) Этот столбец фактически является «ДАТА 'тип.И выясните, это на самом деле хранится как '2018-10-21 07:24:00' и управляется через представление с помощью этой функции:

, to_char (CAST ((FROM_TZ (CAST)(OB_DEL_BIRTH_DTTM как TIMESTAMP), 'GMT') В СЕССИИ ЗОНА ВРЕМЕНИ) КАК ДАТА), 'YYYY-MM-DD HH24: MI: SS') как DEL_DTTM

Я в часовом поясе Америка / Нью-Йорк,поэтому я думаю, что это преобразование применяет «текущую дату» к локализации из соединения ODBC, но «сегодня» - это GMT -5: 00, тогда как сравниваемая дата - во время перехода на летнее время, поэтому должно быть -4:00.

(Подробнее) Поэтому, когда я запускаю «select sessiontimezone from dual» в SQL Developer, я получаю «America / New_York», но затем через C # / ODBC я получаю -5: 00.Если я запускаю 'выберите TZ_OFFSET (sessiontimezone) из dual' через оба, я получаю -5: 00.

Есть идеи, друзья?

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