2010-12-29 23 views
18

El problema que tengo es que el adaptador de datos está mirando solamente la primera fila en cada columna para determinar el tipo de datos. En mi caso, la primera columna "SKU" es números para las primeras 500 filas, entonces tengo SKU, que son números mixtos y letras. Entonces, lo que termina sucediendo es que las filas en la columna SKU se dejan en blanco, pero todavía obtengo la otra información para cada fila de columna.Ayuda con una cadena de conexión OleDB para archivos de Excel

Creo que es la cadena de conexión que controla eso y con mi configuración actual debería funcionar, pero no es así.

Cadena de conexión:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"""; 


ImportMixedTypes=Text;TypeGuessRows=0 

En caso de ser las palabras claves importantes, mira a 0 filas y sólo tiene que utilizar el texto como los tipos de valor para todo.

El "bandaid" que puse en esto es hacer que la primera fila en la hoja de cálculo sea una mezcla de letras y números y específicamente dejar esa fila en mi consulta.

+1

¿Has probado diferentes proveedores, como JET en lugar de ACE? Eche un vistazo aquí para ver otros posibles formatos de cadenas de conexión: http://www.connectionstrings.com/excel – goric

+0

Ya he estado en ese sitio y he intentado todo. Ojalá hubiera una mejor manera de hacer esto. Si quieren diseñar el sistema para tomar una cadena larga, necesitan liberar un generador gratis. Ugh ... –

+1

@theprise JET seguirá teniendo el mismo problema, ya que los valores que se deben modificar están todos en el registro y no se pueden establecer desde la cadena de conexión. – arcain

Respuesta

28

Desafortunadamente, no puede establecer ImportMixedTypes o TypeGuessRows desde la cadena de conexión, ya que esas configuraciones están definidas en el registro. Para el conductor OleDb ACE, sino que están almacenados en

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel 

en el registro. Por lo tanto, se puede simplificar la cadena de conexión a:

conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"""; 

Una vez que establezca TypeGuessRows a 0 y ImportMixedTypes a Text en el Registro, debe obtener el comportamiento que usted está esperando. Sin embargo, podría considerar usar un número adecuadamente grande como 1000 en lugar de cero si considera que el rendimiento de la importación es menos que ideal.

+0

Muchas gracias. –

+9

Solo para tener en cuenta que, si utiliza una máquina de 64 bits, debe agregar 'Wow6432Node' en la clave de registro para que se convierta en:' HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Engines \ Excel' – amarsuperstar

+0

Editar registro, basado en este [enlace] (http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/5b22e94c-37a9-4be5-ad55-3d9229220194/). Funciona en Windows XP pero no funciona en la ventana 7. ¿Debo colocar ** Wow6432Node ** en la clave de registro para 32 o 64 bits? – soclose

Cuestiones relacionadas