2011-10-07 9 views
13

Quando si esegue la query pl/sql [tramite una stored procedure] utilizzando il codice C#, viene visualizzato un errore: Come risolvere lo stesso? Si prega di avvisare. Nota: sto passando false per providerSpecificTypes nel codice.Errore di overflow durante l'esecuzione di query 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, 

Ecco il codice:

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; 

Query:

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

Si prega di aggiungere il resto della query. Anche i tipi di dati delle colonne sarebbero belli –

+0

Quale versione del database? E quali sono i tipi di dati? Assicurati di passare le variabili Date o DateTime nelle tue funzioni TO_CHAR ... – manzwebdesigns

+0

Il database è Oracle 10g.Sì, sto passando le variabili DateTime in to_char function.Thanks. – user74042

risposta

27

Uno del valore colonna selezionata sta avendo una precisione al di là di tipo decimale del .Net. Il modo migliore per risolvere questo problema consiste nel ROUND dei valori della colonna su una dimensione di previsione gestibile. Normalmente li giro intorno a 2 cifre decimali come non avrei più bisogno di quello, potresti decidere di scegliere in base alle tue necessità.

Così, in breve, modificare la tua ricerca in modo che tutte le colonne con un numero maggiore precisione per essere arrotondati al numero di cifre decimali è necessario:

Esempio:

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

dovrebbe affrontare il problema.

Problemi correlati