2010-12-29 18 views
18

Il problema che sto avendo è che l'adattatore dati sta guardando solo la prima riga in ogni colonna per determinare il tipo di dati. Nel mio caso la prima colonna "SKU" è numeri per le prime 500 righe quindi mi capita di avere SKU che sono numeri e lettere misti. Quindi, quello che succede è che le righe nella colonna SKU vengono lasciate vuote, ma ottengo comunque le altre informazioni per ogni riga di colonna.Aiuto con una stringa di connessione OleDB per file excel

Credo che sia la stringa di connessione che controlla quello e con le mie impostazioni correnti dovrebbe funzionare, tuttavia non lo è.

stringa di connessione:

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 

Dovrebbe essere le parole chiave importanti, guardare 0 righe e basta usare il testo come i tipi di valore per tutto.

Il "bandaid" che ho messo su questo è quello di rendere la prima riga del foglio di calcolo una combinazione di lettere e numeri e in particolare lasciare quella riga nella mia query.

+1

Hai provato provider diversi, come JET invece di ACE? Date un'occhiata qui per altri possibili formati di stringhe di connessione: http://www.connectionstrings.com/excel – goric

+0

Sono già stato in quel sito e ho provato di tutto. Vorrei che ci fosse un modo migliore per farlo. Se vogliono progettare il sistema per prendere una lunga stringa, devono rilasciare un generatore gratuito. Ugh ... –

+1

@theprise JET continuerà ad avere lo stesso problema poiché i valori che devono essere modificati sono tutti nel Registro di sistema e non possono essere impostati dalla stringa di connessione. – arcain

risposta

28

Sfortunatamente, non è possibile impostare ImportMixedTypes o TypeGuessRows dalla stringa di connessione poiché tali impostazioni sono definite nel registro. Per il driver ACE OleDb, vengono memorizzati su

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

nel Registro di sistema. Quindi, è possibile semplificare la stringa di connessione 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 volta impostato TypeGuessRows a 0 e ImportMixedTypes al Text nel Registro di sistema, si dovrebbe ottenere il comportamento che ci si aspetta. Tuttavia, si potrebbe considerare di utilizzare un numero adeguatamente grande come 1000 anziché zero se si rileva che le prestazioni dell'importazione non sono ideali.

+0

Grazie mille. –

+9

Giusto per notare per chiunque stia guardando questo, se si utilizza una macchina a 64 bit, è necessario aggiungere 'Wow6432Node' nella chiave di registro in modo che diventi:' HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Access Connectivity \ Motori \ Excel' – amarsuperstar

+0

Modifica il Registro, in base a questo [collegamento] (http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/5b22e94c-37a9-4be5-ad55-3d9229220194/). Funziona nella finestra xp ma non funziona nella finestra 7. Devo mettere ** Wow6432Node ** nella chiave di registro per 32 o 64 bit? – soclose

Problemi correlati