2014-11-14 4 views
0

Мне нужно обработать файлы Excel, сохраненные в определенной папке.Как открыть OLEDBConnection через задачу скрипта SSIS?

В моем пакете SSIS я добавил цикл Foreach, настроенный как File Enumérator, заполняющий переменную filepath. Затем задача сценария использует эту переменную, чтобы открыть файл Excel и обработать его.

enter image description here

Однако, я не в состоянии открыть OLEDB Подключение к моему файлу в задаче сценария. filepath содержит допустимый путь. Я добавил тест в свой скрипт, чтобы проверить файл.

Вот пример моего кода:

// Check file to process. 
string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\"); 

if (rawfilePath == String.Empty || !File.Exists(rawfilePath)) 
      Dts.Events.FireError(0, SCRIPT_TASK_NAME, "Invalid input file '" + rawfilePath + "'...", String.Empty, 0); 

MessageBox.Show(rawfilePath); 

// Open connection. 
string rawFileConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" 
+ rawfilePath + "';Extended Properties='Excel 12.0;HDR=NO;IMEX=1'"; 

MessageBox.Show(rawFileConnectionString); 

OleDbConnection rawExcelConnection = new OleDbConnection(rawFileConnectionString); 
rawExcelConnection.Open(); 

Моя папка C:\TestFolder. Он содержит два файла: C:\TestFolder\export_20140101.xls и C:\TestFolder\export_20140102.xls.

Здесь ошибка:

enter image description here

В английском

Исключение было брошено в целью вызова

+0

У вас есть окна сообщений? Какая строка не работает, создание экземпляра 'rawExcelConnection' или' Open'? – billinkc

+2

Запустите его в режиме отладки или поместите весь код в блок catch try и используйте Dts.FireError с сообщением об исключении в блоке catch – jazzytomato

+0

Блок try/catch спас мне жизнь! Ошибка была связана с движком базы данных (ACE 12.0). Водитель не был найден, я никогда не устанавливал его раньше. – K4timini

ответ

0

Наконец, мой скрипт работает.

Двигатель базы данных ACE 12.0 не был установлен на моем локальном компьютере. Я скачал EXE-пакет от Microsoft website я изменил режим выполнения моего пакета из 64-битных до 32 бит, так как установленная версия Microsoft Office является 32-разрядной версией (Run64BitRuntime к FALSE в настройках проекта).

Это сообщение о how to run a 32 bit package in a 64 bit environnent.

1

Там нет необходимости заменить " \ "с" \\ ", как у вас есть с файлом проверки для обработки.

Компилятор распознает это при преобразовании переменной DTS.

Компилятор признает свой путь в C: \\ TestFolder \\ export_20140102.xls

Когда это произойдет, он видит две пустые директории и не может возвращать значение.

Когда компилятор читает переменную DTS, она считывает ее как литеральную строку.

Он должен работать, если вы измените

string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString().Replace(@"\",@"\\"); 

в

string rawfilePath = Dts.Variables["User::FilePath"].Value.ToString()); 
+0

На самом деле оба решения работают. Проблема не в форматировании URL. – K4timini

Смежные вопросы