Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Convert Oracle Number na .NET Decimal

Aktivity
Avatar
Tomáš "chlastyml" Kacálek:18.10.2016 14:15

Ahoj, mám takový problém na který ne a ne přijít.
Mám tuto metodu. Metoda má na vstupu NHibernate.ISession a query string, který vyhodnotí, výsledek převede na DataTable, který vrátí.

private DataTable LoadData(ISession session, string query) {
      DataTable dt = new DataTable();
      using (IDbCommand command = session.Connection.CreateCommand()) {
        command.Transaction = session.Transaction.GetAdoTransaction();
        command.CommandText = query;
        using (IDataReader dataReader = command.ExecuteReader()) {
          dt.Load(dataReader);
        }
      }
      return dt;
    }

Instance dataReader implementuje rozhraní System.Data.I­DataReader.
Instance command implementuje rozhraní System.Data.ID­bCommand.
Instance dt je v namespace System.Data.
Takže nemám žádnou vyloženou specialitu.
Metoda funguje v pohodě, jen v některých případech vyhodí výjimku:
System.Data.O­racleClient.O­racleException (0x80131938): OCI-22053: chyba přetečení
Moje podezření má db, která má sloupec naformátovaný jako Number a hodnotu v jednom řádku: "1839,7420000­000000000000000000000000­00001". Což zřejmě framework nedokáže přetypovat na .NET decimal a vyhodí tu chybu.
Nesetkal jste se s tímto někdo? Nevíte, jak ručně (kódově) ošetřit, aby se například hodnoty zaokrouhlovaly? Neboť, tak vysokou přesnost nepotřebuji. :-D
Do db nemohu zasahovat, abych například změnil datový typ. Jediné co mám je tato metoda.
Díky za jakoukoliv reakci ;-)

 
Odpovědět
18.10.2016 14:15
Avatar
Tomáš "chlastyml" Kacálek:20.10.2016 16:34

Nakonec řešením je oříznout hodnoty v samotné databázi pomocí funkce Round.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
20.10.2016 16:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.