2010-12-29 1 views
18

Проблема, с которой я сталкиваюсь, заключается в том, что адаптер данных просматривает только первую строку в каждом столбце для определения типа данных. В моем случае первый столбец «SKU» - это номера для первых 500 строк, тогда у меня есть SKU, которые являются смешанными числами и буквами. Итак, что заканчивается, строки в столбце SKU остаются пустыми, но я все еще получаю другую информацию для каждой строки столбца.Помощь с строкой соединения OleDB для файлов excel

Я считаю, что это строка подключения, которая управляет этим, и с моими текущими настройками он должен работать, но это не так.

Строка подключения:

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 

Должно быть важные ключевые слова, посмотрите на 0 строк и просто использовать текст в качестве типов значений для всего.

«Бандайда», которую я наложил, это сделать первую строку в электронной таблице смешением букв и цифр и, в частности, оставить эту строку в моем запросе.

+1

Вы пробовали разные провайдеры, такие как JET вместо ACE? Взгляните сюда на другие возможные форматы строкой связи: http://www.connectionstrings.com/excel – goric

+0

Я уже был на этом сайте и пробовал все. Хотелось бы, чтобы был лучший способ сделать это. Если они хотят, чтобы система заняла длинную строку, им нужно освободить свободный генератор. Ugh ... –

+1

@theprise JET по-прежнему будет иметь ту же проблему, поскольку значения, которые необходимо изменить, находятся в реестре и не могут быть установлены из строки подключения. – arcain

ответ

28

К сожалению, вы не можете установить ImportMixedTypes или TypeGuessRows из строки подключения, поскольку эти параметры определены в реестре. Для драйвера ACE OleDb они хранятся в

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

в реестре. Таким образом, вы можете упростить вашу строку подключения:

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

После того, как вы установили TypeGuessRows в 0 и ImportMixedTypes в Text в реестре, вы должны получить поведение, которое вы ожидаете. Тем не менее, вы можете использовать подходящее количество, например 1000 вместо нуля, если вы обнаружите, что производительность импорта будет меньше идеальной.

+0

Большое спасибо. –

+9

Просто для того, чтобы заметить, что если вы используете 64-битную машину, вам нужно добавить 'Wow6432Node' в раздел реестра, чтобы он стал:' HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Office \ 12.0 \ Access Connectivity Engine \ Двигатели \ Excel' – amarsuperstar

+0

Я редактирую реестр на основе этого [link] (http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/5b22e94c-37a9-4be5-ad55-3d9229220194/). Он работает в окне xp, но не работает в окне 7. Нужно ли вставлять ** Wow6432Node ** в раздел реестра для 32 или 64 бит? – soclose