SSIS генерируются программно: диспетчер подключений к проекту не отображается в списке подключений к проекту

#c# #ssis

#c# #ssis

Вопрос:

Я создаю пакет из c #, и этот код используется для работы с SQL server 2016, но теперь с Sql server 2014 у меня возникают проблемы: я добавляю пакет в проект таким образом :

         proj.PackageItems.Remove("HSTG_"   hstg_table.tablename   ".dtsx");
        proj.PackageItems.Add(p, "HSTG_"   hstg_table.tablename   ".dtsx");
  

В списке подключений проекта я вижу 3 диспетчера подключений,
но в пакете я вижу 0 подключений, а затем, конечно, когда я пытаюсь получить доступ к одному из них таким образом, p.Connections [«META»] выдает ошибку, в которой говорится, что соединение не найдено.
local_variable
local_variable2

Комментарии:

1. Можете ли вы поделиться своим кодом для Cast command, то есть предложением what is inside ForEach ? Похоже, ваше приведение не работает.

2. Привет, приведение приведено здесь только для распечатки списка подключений, однако на консоли ничего не отображается. п. Соединения. Приведение ConnectionManager>().ToList ConnectionManager>().ForEach(x => Консоль. WriteLine(«после подключения:» x.Name )); // Создайте фиктивный заполнитель, затем прикрепите обработчик событий к нему ComponentGenerationSSIS2014.createSqlTask(стр.Исполняемые файлы, «Фиктивный заполнитель» p.Name , «Выбрать 1», null, стр.Соединения[«META»], null, SqlStatementSourceType.DirectInput);

3. Хм, это странно, я проверил, и у меня есть аналогичный код, работающий с SSIS 2014, package. Соединения имеют Project CMS со ссылкой на Project, добавляемую при добавлении пакета в проект. Возможно, вы храните ссылки на библиотеки DLL SSIS 2016, такие как runtime.wrapper и т.д. Попробуйте проверить это, разорвать связь и снова добавить правильные ссылки.

4. Спасибо, я проверяю ссылку, и все они SQL2014, я работаю в корпоративном офисе и не могу запустить Visual Studio с правами администратора.

Ответ №1:

Вместо чтения существующего ispac я создаю его программно, и он работает. Но я все еще не понимаю, почему это не работает предыдущим способом.

  /* Previous way of doing it which work for me on a previous project but not 
working anymore
*/
Project proj = Project.OpenProject(fixed_settings.Default.PROJECT_ISPAC);

// New way by creating the project on the fly
            //Test creation project
            Project proj = Project.CreateProject();
            ConnectionManagerItem connectionManagerItem_meta =   proj.ConnectionManagerItems.Add("OLEDB", "META.conmgr");
            connectionManagerItem_meta.ConnectionManager.Name = "META";
            connectionManagerItem_meta.ConnectionManager.ConnectionString = "Data Source="   fixed_settings.Default.server_meta   ";Initial Catalog="   fixed_settings.Default.server_meta   ";Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;";

            ConnectionManagerItem connectionManagerItem_stg = proj.ConnectionManagerItems.Add("OLEDB", "STG.conmgr");
            connectionManagerItem_stg.ConnectionManager.Name = "STG";
            connectionManagerItem_stg.ConnectionManager.ConnectionString = "Data Source = "   fixed_settings.Default.server_stg   "; Initial Catalog = "   fixed_settings.Default.database_stg   "; Provider = SQLNCLI11.1; Integrated Security = SSPI; Auto Translate = False;";

            ConnectionManagerItem connectionManagerItem_hstg = proj.ConnectionManagerItems.Add("OLEDB", "HSTG.conmgr");
            connectionManagerItem_hstg.ConnectionManager.Name = "HSTG";
            connectionManagerItem_hstg.ConnectionManager.ConnectionString = "Data Source="   fixed_settings.Default.server_hstg   ";Initial Catalog="   fixed_settings.Default.database_hstg   ";Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;";