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.