Avatar
Tomáš "chlastyml" Kacálek:

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. října 14:15
Avatar
Tomáš "chlastyml" Kacálek:

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. října 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.