Динамически назначать имя файла для строки подключения 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\";