powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODAC C# не может Double?
2 сообщений из 2, страница 1 из 1
ODAC C# не может Double?
    #39678048
pemp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, а как из шарпа к ораклу принято подключаться?
попробовал как рекомендуют, скачал последний ODAC и столкнулся с удивительной штукой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
string sql = "select 1/3 from dual"; // или любая другая периодическая дробь

OracleConnection con = new OracleConnection(conString);
OracleCommand cmd = new OracleCommand(sql, con);
OracleDataAdapter oda = new OracleDataAdapter(cmd);

// а дальше без разницы
// можнно так 
oda.Fill(dataTable);

//или так 
dataTable.Load(dataTable);
//  или так 
while (dr.Read())
{
   dr[0].ToString();
}
// все валится с ошибками InvalidCastException 



Round в запросе лечит
явный dr.GetDouble() тоже, но это не решение
...
Рейтинг: 0 / 0
ODAC C# не может Double?
    #39678779
pemp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки проблема в том, что decimal в oracle имеет большую точность чем decimal в дотнете. и из коробки это не работает, разработчик odac не придумал ничего лучше чем невнятно валится в ошибку если вдруг придет число, которое odac не сможет переварить внутри себя.

решения два. первое round или trunc в запросах для любой операции которая потенциально может вернуть число у которого много знаков и надеяться что никто этого не забудет.
второе на клиенте грузить датаадапетром у которого ReturnProviderSpecificTypes = true и вручную приводить типы, для decimal понизить точность
Код: c#
1.
   dotNetDecimalVar = OracleDecimal.SetPrecision(oracleDecimalVar, 27); //  казалось бы должно и с 28  работать, но один уходит на знак.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ODAC C# не может Double?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]