База данных Oracle возвращает ошибочные строки из хранимой процедуры, используя devart в C#

У меня есть база данных Oracle с хранимой процедурой:

PROCEDURE "CalculateChats"
  (
    "In_Conf" IN NUMBER,
    "In_From" IN TIMESTAMP,
    "In_To" IN TIMESTAMP,
    "Out_Cursor" OUT "Cursor"
  ) AS
  BEGIN
  OPEN "Out_Cursor" FOR
  SELECT 
  TO_TIMESTAMP(SUBSTR("Started", 0, 13), 'yyyy-mm-dd hh24:MI' ) as "From", 
  CAST(TO_TIMESTAMP(SUBSTR("Started", 0, 13), 'yyyy-mm-dd hh24:MI') + 1/24 AS TIMESTAMP) as "To", 
  COUNT(*) as "Chats"
  FROM "SomeTableContainingChats" 
  WHERE "Conf" = "In_Conf" 
  AND "Started" >= "In_From"
  AND "Started" <= "In_To" 
  GROUP BY SUBSTR("Started", 0, 13) 
  ORDER BY SUBSTR("Started", 0, 13) ASC;
  END "CalulateChats";

При запуске хранимая процедура выдает мне таблицу [ From | К | NrOfOfferedChats ] Даты являются правильными по сравнению со значениями.

(Пример)

[ From                         | To                            | Chats ]
2014-09-15 08:00:00,000000000   2014-09-15 09:00:00,000000000   61
2014-09-15 09:00:00,000000000   2014-09-15 10:00:00,000000000   96
2014-09-15 10:00:00,000000000   2014-09-15 11:00:00,000000000   113
2014-09-15 11:00:00,000000000   2014-09-15 12:00:00,000000000   80

Теперь я беру это из кода C#:

 using (var oraclePackage = new OraclePackage())
        {
            oraclePackage.Connection = DbConnection;
            oraclePackage.PackageName = @"CHAOS.""HiddenPackageName""";

            oraclePackage.Parameters.AddWithValue("In_Conf", conf);
            oraclePackage.Parameters.AddWithValue("In_From", from);
            oraclePackage.Parameters.AddWithValue("In_To", to);
            oraclePackage.Parameters.AddWithValue("Out_Cursor", null).Direction = ParameterDirection.Output;
            oraclePackage.Parameters["Out_Cursor"].OracleDbType = OracleDbType.Cursor;

            oraclePackage.ExecuteProcedure(@"""CalculateChats""", oraclePackage.Parameters, true);

            using (OracleDataReader oracleReader = ((OracleCursor)oraclePackage.Parameters["Out_Cursor"].Value).GetDataReader())
            {
                if (oracleReader.HasRows)
                {
                    while (oracleReader.Read())
                    {
                       oracleReader;
                    }
                }
            }
        }

И данные от оракула oracleReader = От: 0015-09-14 01:00:00,000000000, Кому: 0015-09-14 02:00:00,000000000, Чаты: 80

Теперь вопрос: что может быть причиной перехода с базы данных на код C#, и любые предложения о том, как ее решить, будут оценены.

1 ответ

Решение

После 2 дней бросая это вокруг я узнал

CAST(TO_TIMESTAMP(SUBSTR("Started", 0, 13), 'yyyy-mm-dd hh24:MI') + 1/24 AS TIMESTAMP)

Конвертировал метку времени с 2014-09-16 08:00:00 в 16-SEP-14 02:00:00 Я до сих пор не знаю, почему она была конвертирована таким образом, но:

CAST(TO_CHAR("Started", 'YYYY-MM-dd HH24') || ':00:00' AS TIMESTAMP)

Казалось бы, решить проблему.

Другие вопросы по тегам