2011-10-07 70 views
13

Cuando ejecuto la consulta pl/sql [a través de un procedimiento almacenado] utilizando mi código C#, aparece un error: ¿Cómo puedo resolver el problema? Nota: estoy pasando falso para providerSpecificTypes en el código.Obteniendo error de desbordamiento al ejecutar la consulta 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, 

Aquí está el código:

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; 

Consulta:

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

Agregue el resto de la consulta. También los tipos de datos de las columnas serían agradables –

+0

¿Qué versión de base de datos? ¿Y cuáles son los tipos de datos? Asegúrese de estar pasando las variables Date o DateTime a sus funciones TO_CHAR ... – manzwebdesigns

+0

La base de datos es Oracle 10g. Sí, estoy pasando las variables DateTime a la función to_char. Gracias. – user74042

Respuesta

27

Uno de valor de la columna seleccionada es tener una precisión más allá de tipo decimal del .Net. La mejor manera de resolver este problema es REDONDEAR los valores de sus columnas a un tamaño de previsión manejable. Normalmente los redondeo a 2 dígitos de decimal ya que no necesitaría más que eso, es posible que desee elegir de acuerdo a su necesidad.

Así que en resumen, cambiar la consulta de manera que todas las columnas con un número mayor precisión a redondearán al número de decimales que necesita:

Ejemplo:

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

debe abordar su problema.

Cuestiones relacionadas