Leer archivo excel en C#

En el trabajo estoy creando un programa c# que lea un archivo excel y vuelque los datos a oracle.

El problema lo tengo en la lectura del excel, concretamente con ALGUNAS celdas que contienen, en principio, números.

Concretamente
string sqlxls = "SELECT ID_DIM_PRECARGA_CONTRATO,ID_CUSTOMER,ID_PRODUCT,COUNTRY, CUSTOMER, TRADER, SORT_QUALITY, QUALITY, LINE, FINENESS, BRAND, PACKAGING, P01, N01, P02, N02, P03, N03, P04, N04, P05, N05, P06, N06, P07, N07, P08, N08, P09, N09, P10, N10, P11, N11, P12, N12, P13, N13, P14, N14, P15, N15, P16, N16, P17, N17, P18, N18 FROM [INPUT$]";
            reader = pruebaXLS.Consultar(sqlxls);



Hasta aquí, ningún problema. Una consulta sobre el excel, usando una clase que hemos construido aquí y jamás ha dado problema, devuelve un objeto OleDbDataReader.

Se recorre el objeto y se leen las celdas:
if (!reader.IsDBNull(0))
                    id_precarga = reader.GetString(0);
if (!reader.IsDBNull(1))
                    id_customer = reader.GetString(1);


el problema está en que a veces, al leer celdas numéricas , devuelve un error.
He probado reader.GetString(i), reader.Decimal(i), reader.GetDouble, float, etc y nada, dice que no se puede convertir un número infinito. la celda en la que falla tiene un 21,5
No entiendo el error.
--------------------------------

SOLUCIÓN

Lo mejor para evitar el error es extraer los valores con GetValue() y luego introducirlos en oracle como si fuesen cadena
insert into() values ('valor leido')
Si se trata de introducir como numérico, la coma es un problema.

Otra solución es construir el insert con separadores q,[valor],
aunque el formato de la columna en la tabla de oracle sea numérico.
Ni oracle ni Excel es software libre, poca ayuda tendrás en este subforo, compañero.
DJTesto escribió:Ni oracle ni Excel es software libre, poca ayuda tendrás en este subforo, compañero.

El problema no estaba ni en oracle ni en excel, si no en mi código, que puse aquí. Así que aunque lea y escriba en fuentes privativas, el programa en sí es libre.

De todas formas, ya está resuelto y puesta la solución por si alguien tiene el mismo problema ;)
2 respuestas