База данных 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)
Казалось бы, решить проблему.