C sharp - Problemas con propiedades IMEX y MaxScanRows

 
Vista:
sin imagen de perfil

Problemas con propiedades IMEX y MaxScanRows

Publicado por Leonardo Josué (25 intervenciones) el 19/11/2008 18:46:49
Buenos días a todos los foristas, hace algunos días envié a este mismo foro una pregunta para leer archivos de Excel en donde una columna tuviera diferentes tipos de datos mezclados.

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=227&texto=C+sharp&n1=515644&n2=0&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

Gracias al Compañero Gabriel Fabres pude solucionar este caso utilizando la propiedad IMEX = 1 en el string de conexión a mi archivo de Excel, sin embargo ahora me ha surgido un nuevo problema (que en teoría es igual al que presenté anteriormente) en el que la propiedad IMEX no funiciona. Me explico.

Una de mis columnas del archivo Excel Tiene los siguientes Datos:

A
------------------
100
99
103
31
44
20
22
2
'29
'27
'50
'30
'34
34
42

Pueden notar que a partir del registro 9 los números llevan antepuesto una apóstrofe o comilla simple (')

Yo tengo mi string de Conexión asi:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:/ArchivoExcel.xlsx;Extended Properties="Excel 12.0;HDR=YES;IMEX=1;MAXSCANROWS=0"

Con la propiedad MaxScanRows en teoría me debería leer toda la columna para determinar el tipo de dato por defecto (en este caso lo debería dejar como tipo texto) pero al momento de querer mostrar el contenido de esta columna en un GridView me pone en nulo todos los campos que contienen la comilla:

A
------------------
100
99
103
31
44
20
22
2
null
null
null
null
null
34
42

Ahora bien, estuve leyendo más acerca de este comportamiento y encontré que esto se debe a un bug en el Driver de ODBC. Esto hace que siempre tome los primeros 8 renglones para hacer el escaneo de tipos:

http://www.mvp-access.es/softjaen/articulos/excel/ado_dao_excel.htm#Index3
---------------
"Si está utilizando el driver ODBC con un nombre de origen de datos (DSN), deberá modificar el valor Rows to Scan en el cuadro de diálogo para la configuración del origen de datos. Sin embargo, debido a un bug del driver ODBC, especificar el parámetro Rows to Scan (MaxScanRows) no tiene ningún efecto. En otras palabras, el driver ODBC de Excel (MDAC 2.1 y superiores) siempre escanea las primeras ocho (8) filas del origen de datos especificado para determinar el tipo de dato que contiene la columna. Para más información consulte el siguiente artículo de Microsoft Knowledge Base:"
http://support.microsoft.com/default.aspx?scid=kb;EN-US;189897
---------------

La solución que te indica es modificar una entrada en el Registro de Windows para especificarle que se debe escanear toda la columna sin embargo no me es posible modificar esta entrada de registro, ya que afectaría a otras aplicaciones que también estan utilizando esta funcionalidad. Mi pregunta es si hay alguna otra forma de poder solucionar este problema.

Saludos y nuevamente muchas gracias por el apoyo:
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder