Почему метод OleDb ExecuteScalar возвращает десятичное число при запросе COUNT? - PullRequest
3 голосов
/ 16 декабря 2011

Я запрашиваю базу данных Oracle 10g, используя OleDb.

Мой запрос очень прост, просто получаю СЧЕТ записей из заданной таблицы.

При использовании ExecuteScalar я столкнулся с ошибками преобразования, пытаясь преобразовать значение результата в Int.При проверке типа это оказывается System.Decimal.

Теперь я видел в других местах пользователей, имеющих подобные проблемы с идентификаторами, но в этом случае я просто возвращаю счет, который, как ожидается, будетЦелое число, так зачем мне все равно его разыгрывать?

SQL ниже.

 _sqlText = @" select count(*) as num_records from ce_quote_ext 
        where ce_quoteid in (select ce_quoteid from ce_quote where opportunityid in 
        (select opportunityid from ce_quote where ce_quoteid = '?' )) and custsign = 'T' ";

1 Ответ

3 голосов
/ 16 декабря 2011

Это действительно библиотека Oracle OleDb, которая возвращает десятичную дробь.Это правильное поведение.См. здесь для документации Oracle.В примере из документации Oracle они приводят возвращение функции COUNT () в десятичное число.Итак, это выглядит по замыслу.

// C#
...
CmdObj.CommandText = "select count(*) from emp";
decimal count = (decimal) CmdObj.ExecuteScalar();
...
...