2010-12-29 8 views
18

Das Problem, das ich habe, ist, dass der Datenadapter wird in jeder Spalte nur die erste Zeile sucht den Datentyp zu bestimmen. In meinem Fall ist die erste Spalte "SKU" Nummern für die ersten 500 Zeilen, dann habe ich zufällig SKU's, die gemischte Zahlen und Buchstaben sind. Also was passiert, ist, dass Zeilen in der SKU-Spalte leer bleiben, aber ich bekomme immer noch die anderen Informationen für jede Spaltenzeile.Hilfe mit einem OleDB Verbindungszeichenfolge für Excel-Dateien

Ich glaube, es ist die Verbindungszeichenfolge, dass und mit meinen aktuellen Einstellungen steuert es funktionieren soll, ist es aber nicht.

Connection String:

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 

Sollten die wichtigen Schlüsselwörter sein, bei 0 Zeilen aussehen und nur Text als die Werttypen für alles verwenden.

Die „bandaid“ Ich habe auf diesem gesetzt ist, um die erste Zeile in der Tabelle eine Mischung aus Buchstaben und Zahlen zu machen und speziell die Zeile verläßt in meiner Abfrage aus.

+1

Haben Sie verschiedene Anbieter, wie JET statt ACE versucht? Schaue hier nach anderen möglichen Verbindungsstringformaten: http://www.connectionstrings.com/excel – goric

+0

Ich war schon auf dieser Seite und habe alles versucht. Ich wünschte, es gäbe einen besseren Weg, dies zu tun. Wenn sie das System so entwerfen möchten, dass sie einen langen String aufnehmen können, müssen sie einen freien Generator freigeben. Ugh ... –

+1

@theprise JET wird immer noch das gleiche Problem haben, da die Werte, die geändert werden müssen, alle in der Registrierung sind und nicht aus der Verbindungszeichenfolge gesetzt werden können. – arcain

Antwort

28

Leider können Sie ImportMixedTypes oder TypeGuessRows nicht aus der Verbindungszeichenfolge festlegen, da diese Einstellungen in der Registrierung definiert sind. Für den ACE OLEDB-Treiber, sind sie bei

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

in der Registry gespeichert. So können Sie Ihre Verbindungszeichenfolge vereinfachen:

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;"""; 

Sobald Sie TypeGuessRows zu 0 und ImportMixedTypes zu Text in der Registrierung festgelegt, sollten Sie das Verhalten erhalten Sie erwarten. Sie können jedoch eine entsprechend große Zahl wie 1000 anstelle von 0 verwenden, wenn die Importleistung nicht optimal ist.

+0

Vielen Dank. –

+9

einfach für jedermann zu beachten bei dieser Suche, wenn Sie eine 64-Bit-Computer verwenden, dann müssen Sie 'Wow6432Node' in den Registrierungsschlüssel hinzufügen, so wird es:' HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Engines \ Excel' – amarsuperstar

+0

I bearbeiten Registry auf der Grundlage dieser [link] (http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/5b22e94c-37a9-4be5-ad55-3d9229220194/). Es funktioniert in Windows XP aber funktioniert nicht in Windows 7. Muss ich ** Wow6432Node ** in den Registrierungsschlüssel für 32 oder 64 Bit setzen? – soclose

Verwandte Themen