В декабре 2010 года Microsoft (наконец!) Опубликовала 64-разрядный OLEDB-драйвер для файлов CSV и XLSX.
Вам понадобится 64-разрядный Microsoft Access Database Engine 2010 Redistributable. Обязательно загрузите 64-разрядную версию (AccessDatabaseEngine_X64.exe
). Чтобы установить его, вам необходимо удалить 32-разрядные приложения Office (включая Sharepoint Designer!).
Если вы хотите CSV, вам понадобится имя драйвера Microsoft Access Text Driver (*.txt, *.csv)
, но я не смог найти полную строку соединения, но используя этот драйвер от OLEDB (хотя, если есть, оставьте похвалу, и я изменить этот ответ). Обратите внимание, что 64-битные имена отличаются от 32-разрядных версий.
Для чтения XLSX файлов, используйте строку соединения, как это:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
Для XLS (до 2007 Excel) файлы используют строку подключения, как это:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ FilePath
+ ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
Большое спасибо this blog post и this answer для указания меня в правильном направлении, когда я столкнулся с той же проблемой и для обеспечения контента, который я адаптировал для написания этого ответа.
Что означает «не открытое»? Вы ничего не открываете, вы выполняете запрос. Синтаксис прекрасен, отсутствие исключения указывает на то, что либо dt заполняется строками, либо что лист пуст. Добавьте базовую проверку Console.WriteLine (dt.Rows.Count). –
Я бы рекомендовал попробовать выражение SELECT напрямую и посмотреть, что вы вернетесь, прежде чем заполнять DT. Если запрос плюет на ошибку, добавьте его в вопрос здесь. если это не так, и говорит, что это успешно, тогда Ганс прав, потому что ваш лист пуст. – Phillip