Я не могу найти этот вопрос нигде в Google (или StackOverflow), который меня действительно удивил, поэтому я помещаю его сюда, чтобы помочь другим в той же ситуации.
У меня есть SQL-запрос, который отлично работает на Oracle Sql Developer, но когда я запускаю его через C#
с помощью adapter.Fill(table)
для получения результатов, я получаю ошибки Specified cast is not valid
(System.InvalidCastException
).
Вот вырезанная версия кода С#:
var resultsTable = new DataTable();
using (var adapter = new OracleDataAdapter(cmd))
{
var rows = adapter.Fill(resultsTable); // exception thrown here, but sql runs fine on Sql Dev
return resultsTable;
}
И вот упрощенная версия SQL:
SELECT acct_no, market_value/mv_total
FROM myTable
WHERE NVL(market_value, 0) != 0
AND NVL(mv_total, 0) != 0
Если я удаляю предложение о разделении, это не ошибка, поэтому он определен для этого. Тем не менее, как market_value, так и mv_total
имеют тип Number (19,4), и я вижу, что адаптер Oracle ожидает десятичную величину, так что кастинг происходит? Почему это работает на SqlDev, но не на С#?