2011-10-07 5 views
13

Po uruchomieniu zapytania pl/sql [za pośrednictwem procedury przechowywanej] przy użyciu mojego kodu C# pojawia się błąd: Jak rozwiązać ten sam problem? Uwaga: niepoprawne przekazywanie dla operatoraSpecificTypes w kodzie.Uzyskiwanie błędu przepełnienia podczas wykonywania zapytania pl/sql

Error Message: 
System.Data.OracleClient.OracleException: OCI-22053: overflow error 
at System.Data.Common.DbDataAdapter.FillErrorHandler(Exception e, DataTable dataTable, Object[] dataValues)  
at System.Data.Common.DbDataAdapter.FillLoadDataRowChunk(SchemaMapping mapping, Int32 startRecord, Int32 maxRecords)  
at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)  
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) 
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)  
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, 

Oto kod:

DataSet ds = new DataSet(); 
     try 
     { 
      this.OpenDBConnection(); 
      this.dbAdapter.ReturnProviderSpecificTypes = providerSpecificTypes; 
      this.dbAdapter.Fill(ds); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      CloseDBConnection(); 
      this.cmd.Parameters.Clear(); 
     } 
      return ds; 

Zapytanie:

SELECT client_id, TO_CHAR (business_dt, 'MM/DD/YYYY') AS business_dt 
     , mkt_type 
     , mkt_name 
     , product_name 
     , period 
     , TO_CHAR (start_dt, 'MM/DD/YYYY') AS start_dt 
     , TO_CHAR (end_dt, 'MM/DD/YYYY') AS end_dt 
     , duration 
     , term 
     , NULL AS strike_price 
     , instrument_type 
     , final_price 
     , NULL AS product_price 
     , units 
     , NULL AS expiry_dt 
     , mkt_close 
     , cons_flag 
+1

Dodaj resztę zapytania. Również typy kolumn mogłyby być ładne. –

+0

Jaka jest wersja bazy danych? A jakie są typy danych? Upewnij się, że przekazujesz zmienne Date lub DateTime do swoich funkcji TO_CHAR ... – manzwebdesigns

+0

Baza danych to Oracle 10g. Tak, przekazuję zmienne DateTime do funkcji to_char. Thanks. – user74042

Odpowiedz

27

Jednym z wybraną wartością kolumny jest o precyzję poza rodzaju dziesiętnego w .NET. Najlepszym sposobem rozwiązania tego problemu jest ZAZNACZENIE wartości kolumn do przewidywalnego rozmiaru zarządzania. Zazwyczaj zaokrąglaję je do 2 cyfr miejsca po przecinku, ponieważ nie potrzebuję więcej niż to, możesz chcieć wybrać w zależności od potrzeb.

Tak w skrócie, zmienić zapytanie, tak że wszystkie kolumny o wyższej liczbie precyzyjnego być zaokrąglona do liczby dziesiętne trzeba:

Przykład:

Select ROUND(final_price, 2) From <your table> 

powinny dotyczyć problemu.