Как я получаю доступ к источнику данных Excel от пакета SSIS, развернутого на 64-разрядном сервере?

для других, которые нашли это в поиске:

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

ie:

MyClass myclass = new MyClass();

// then later

MyClass.someFunction();

Это, очевидно, статический метод. (хорошо для чего-то) Но то, что я действительно хотел сделать (в большинстве случаев было)

myclass.someFunction();

Это такая глупая ошибка, но каждые пару месяцев я теряю около 30 минут, возившись с vars в Определения «MyClass» для определения того, что я делаю неправильно, когда это действительно так, это просто опечатка.

Смешное примечание: переполнение стека подчеркивает синтаксис, чтобы сделать ошибку действительно очевидной здесь.

7
задан user5071535 30 September 2015 в 16:43
поделиться

4 ответа

Нет никакого 64-разрядного Струйного поставщика OLEDB, таким образом, Вы не можете получить доступ к файлам Excel от 64-разрядного SSIS.

Однако можно использовать 32-разрядный SSIS даже на 64-разрядном сервере. Это уже установлено при установке 64-разрядной версии и всего, что необходимо сделать, выполняется 32-разрядный DTEXEC.EXE - установленный тот Program Files (x86)\Microsoft Sql Server\90\Dts\Binn (замените 90 100 при использовании 2008 SSIS).

2
ответ дан 6 December 2019 в 12:56
поделиться

Можно использовать соединение Excel в среде на 64 бита. Перейдите к свойствам конфигурации пакета.

При отладке-> Параметры отладки-> Run64BtRuntime-> изменяются на Ложь, Кроме того, при использовании SQL Agent, переходят к свойствам шага задания и затем проверяют время выполнения на 32 бита.

примечание: это только относится к отладке в рамках Visual Studio...

4
ответ дан 6 December 2019 в 12:56
поделиться

Если это не бизнес-требование, я предлагаю, чтобы Вы переместили строку подключения от командной строки до пакета и использовали конфигурацию пакета для определения пути к файлу Excel (чтобы не к твердому коду это). Это поможет поддержать.

  1. Определите переменную @ExcelPath.
  2. Используйте свойство Expression соединения для построения строки подключения - пример: "Data Source=" + @[User::FilePath] + ";Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;"
  3. Присвойте значение @ExcelPath в конфигурации пакета.

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


У меня также были некоторые проблемы с SSIS на 64-разрядном SQL Server 2005. То сообщение из моего блога не отвечает на Ваш вопрос, но это несколько связано так, я отправляю ссылку.

2
ответ дан 6 December 2019 в 12:56
поделиться

Я вроде сделал то, что сделал доктор Зим, но я скопировал файл DTExec C: \ Program Files (x86) \ Microsoft SQL Server \ 90 \ DTS \ Binn \ DTExec.exe в C: \ Program Files \ Microsoft SQL Server \ 90 \ DTS \ Папка Binn \ , но названная 32-битная для DTExec32.exe

, тогда я смог запустить скрипт SSIS через сохраненный процесс:

set @params = '/set \package.variables[ImportFilename].Value;"\"' + @FileName + '\"" '
set @cmd =  'dtexec32 /SQ "' + @packagename + ' ' + @params + '"'
--DECLARE @returncode int
exec master..xp_cmdshell @cmd
--exec @returncode = master..xp_cmdshell @cmd
--select @returncode
0
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: