Динамически назначать имя файла для строки подключения excel

Это мой первый раз, когда я играл с SSIS в SQL Server 2012. Я могу успешно прочитать файл excel и загрузить его содержимое в таблицу на SQL-сервере 2012 года. Задача - простой файл с прямым чтением Excel, а затем копирование на SQL-сервер без проверки или трансформации на данный момент. Задача была успешной. Но когда я попытался сделать пакет, прочитав имя файла из переменной вместо исходного жестко закодированного, он генерировал ошибку "DTS_E_OLEDBERROR". Произошла ошибка OLE DB. Код ошибки: 0x80040E4D "

enter image description here

Я просто заменил строку жесткого кодирования в менеджере соединений excel с выражением, которое принимало значение переменной, назначенной выражением

enter image description here

переменной было присвоено значение перед запуском задачи потока данных. Переменная была проверена и имела правильное значение.

enter image description here

Но приведенная ниже ошибка была сгенерирована при запуске задачи потока данных.

enter image description here

Было бы очень полезно, если бы кто-то мог указать, что я сделал неправильно, и посоветовать мне, как решить проблему.

Ответы

Ответ 1

Вариант A

Свойство ConnectionString для диспетчера подключений Excel - это не то, куда я иду, чтобы манипулировать текущим файлом, что контрастирует с обычным диспетчером соединений с плоским файлом.

Вместо этого поставьте выражение в свойстве Excel Connection Manager ExcelFilePath.

enter image description here

В теории не должно быть никакой разницы между ConnectionString и ExcelFilePath, за исключением того, что у вас будет больше "вещей", чтобы построить, чтобы получить строку соединения в порядке.

Кроме того, убедитесь, что вы выполняете пакет в 32-разрядном режиме.

Вариант B

Альтернативой, с которой вы можете столкнуться, является то, что значение времени разработки для строки подключения недействительно после ее запуска. Когда пакет начинается, он проверяет, что все ожидаемые ресурсы доступны, а если нет, то он быстро выходит из строя, а не умирает от средней нагрузки. Вы можете отложить эту проверку до тех пор, пока SSIS не сможет фактически получить доступ к ресурсу, и вы сделаете это, установив для свойства DelayValidation значение True. Это свойство существует во всем в SSIS, но я бы начал с его установки в Excel Connection Manager. Если это еще выдаст ошибку проверки пакета, попробуйте также установить правильность проверки задержки потока данных.

Ответ 2

У меня было огромное количество времени, пытаясь заставить это работать, даже после выполнения всех инструкций, поэтому я просто сохранил его со статическим именем Excel и добавил "Задачу файловой системы", чтобы скопировать файл и создать новый файл с любым имя мне нужно.

Ответ 3

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

Provider=Microsoft.ACE.OLEDB.12.0;

Data Source=" + @[User::InputFolder] + "\\"+ @[User::FileName] +";

Extended Properties=\"EXCEL 12.0 XML;HDR=YES\";