Ошибка подключения служб SSIS - недопустимое имя файла - PullRequest
0 голосов
/ 20 января 2012

Я вижу проблему с заданием SSIS (SQL Server 2005), в результате которого появляется следующая ошибка:

Имя файла "Provider = Microsoft.Jet.OLEDB.4.0;Источник данных = \ UNC \ FOLDERS \ filename.xls; Расширенные свойства = "EXCEL 8.0; HDR = YES"; "указанное в соединении недействительно.

Мой поиск по этому сайту и другим указывает на то, что наиболее частой причиной этого является ошибка прав доступа, но я не верю, что это так в этой ситуации,число файлов было успешно обработано с помощью этой реализации.

Вот краткий обзор настройки:

Поставщики FTP-файлов нам ежедневно, которые служба Windows получает, копирует на временныйкаталог, а затем вызывает задания SSIS для этих файлов.Для каждого поставщика есть два задания SSIS, одно для потока данных моментального снимка и одно для списка транзакций.

В настоящее время в общем процессе насчитывается более 50 различных заданий служб SSIS.Все они работают, за исключением одного конкретного задания транзакции, которое завершается с ошибкой выше в шаге задачи скрипта.Файлы приходят по крайней мере ежедневно с уникальными именами файлов, поэтому я беру работу, определяю поставщика на основе исходного каталога, а затем определяю тип файла на основе индикаторов в имени файла, чтобы определить, какое задание SSIS вызывать.Поскольку имена файлов меняются каждый день, когда служба вызывает задание SSIS, я передаю ряд параметров, включая имя файла поставщика, чтобы он мог правильно подключиться к файлу.

Каждое задание начинается с задачи сценария, которая устанавливает необходимые значения переменных для остальной части задания.Например, поскольку имя файла вендора меняется при каждом запуске, я передаю имя файла вендора через коллекцию переменных служб SSIS, а затем задаю строку подключения источника данных, используя это имя файла в качестве источника данных в строке.Именно в этот момент задачи скрипта возникает вышеуказанная ошибка.Вот код сценария задачи, в котором возникает ошибка:

Dts.Connections("Transactions File").ConnectionString = _
    Dts.Variables("ConnectionString").Value.ToString().Replace("##FILE_PATH##", sourceFilePath)

Значение ConnectionString: Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = ## FILE_PATH ##; Расширенные свойства = "EXCEL 8.0;HDR = YES ";SourceFilePath - это полный UNC-путь к файлу вендора в каталоге обработки

Я не верю, что это ошибка прав доступа, так как все другие файлы, проходящие этот процесс (использующие тот же каталог хранения для обработки), работают,Это не должно быть связано с тем, что файл не существует, поскольку он повторяет тот же процесс, что и любой другой файл, и я убедился, что файл правильно попадает в правильный каталог.Я также подумал, что строка подключения может быть слишком длинной, но путь к файлу заканчивается на 109 символов и даже с более коротким (<90) полным путем, возникает та же ошибка. </p>

Есть ли что-нибудь еще, что вы можетепридумать для меня посмотреть?Спасибо за любую помощь.

1 Ответ

0 голосов
/ 21 января 2012

Основываясь на представленной информации, вы все делаете правильно. Если вы новичок в SSIS, я хотел бы предложить вам копию превосходной надстройки BIDSHelper . Он имеет отличные функции, которые действительно могут сэкономить ваше время, особенно в отношении конфигураций и выражений.

Я создал справочный пакет, в котором диспетчер подключений Excel указывал на C:\ssisdata\so_paulsmithjr.xls, и все подключил.

Control flow

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

  • CurrentFile - C: \ ssisdata \ so_paulsmithjr.xls
  • PlaceHolder - ## FILE_PATH ##
  • TemplateConnection - Provider=Microsoft.Jet.OLEDB.4.0;Data Source=##FILE_PATH##;Extended Properties="Excel 8.0;HDR=YES";

Четвертая переменная задается как выражение (щелкните правой кнопкой мыши по переменной, в окне свойств. Установите Evaluate as Expression = True и Expression ниже)

  • CurrentConnection - REPLACE(@[User::TemplateConnection], @[User::PlaceHolder], @[User::CurrentFile])

Я сравнил значение CurrentConnection с ReferenceConnection (которое является исходным значением строки подключения Excel Connection Manager), и все совпадало. На этом этапе, если бы я изменил значение CurrentFile на C: \ ssisdata \ so_paulsmithjr - Copy.xls, это автоматически отразится на значении CurrentConnection.

Последним трюком будет использование выражения в диспетчере соединений Excel. Опять же, щелкните правой кнопкой мыши на CM и под Свойствами появятся выражения. Он не будет расширяться, так как под ним ничего нет. Вместо этого щелкните по эллипсам, затем выберите свойство ConnectionString и снова выберите эллипсы, и на этот раз перетащите вниз переменную @[User::CurrentFile]. Нажмите OK x2, и теперь ваш менеджер соединений настроен на использование везде, где указана переменная CurrentConnection.

Это работает лучше?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...