Загрузка пакета служб SSIS и диспетчеров соединений в приложении WPF

Я создал проект службы интеграции с тремя менеджерами соединений (которые определены на уровне проекта), теперь у меня есть пакет служб SSIS (.dtsx) и я хочу использовать его в своем приложении.
Поэтому я использую Microsoft.SqlServer.Пространство имен Dts как показано ниже:

string pkgLocation;
Package pkg;
Microsoft.SqlServer.Dts.Runtime.Application app;
DTSExecResult pkgResults;
pkgLocation = @"D:My JobTadbirgaranIntegration Services ProjectMyPackage.dtsx";
app = new Microsoft.SqlServer.Dts.Runtime.Application();
pkg = app.LoadPackage(pkgLocation, null);
pkgResults = pkg.Execute();

но очевидно, что этот код не загружает диспетчеры соединений проекта, поэтому можно ли загрузить файлы диспетчера соединений программным способом и добавить их в свойство package connection? или следует определить соединения в пакете в проекте службы интеграции?

2 ответа

  1. Конфигурации можно использовать для программного управления свойствами подключения. Вот пример.

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SqlServer.Dts.Runtime;
    using Microsoft.SqlServer.Dts.Tasks.BulkInsertTask;
    
    namespace configuration_API
    {
        class Program
        {    
            static void Main(string[] args)
            {
            // Create a package and set two properties.
                Package pkg = new Package();
                pkg.EnableConfigurations = true;
                pkg.ExportConfigurationFile(@"C:\conf.xml");
    
                // Create a variable object and add it to the 
                // package Variables collection.
                Variable varPkg = pkg.Variables.Add("var", false, "", 100);
                varPkg.Value = 1;
                string packagePathToVariable = varPkg.GetPackagePath();
    
                // Create a configuration object and add it to the 
               // package configuration collection.
                Configuration config = pkg.Configurations.Add();
    
               // Set properties on the configuration object.
                config.ConfigurationString = "conf.xml";
                config.Description = "My configuration description";
                config.ConfigurationType = DTSConfigurationType.ConfigFile;
                config.PackagePath = packagePathToVariable;
    
                // Save the package and its configuration.
                Application app = new Application();
                app.SaveToXml(@"c:\pkg.xml", pkg, null);
    
                // Reload the package.
                Package p1 = app.LoadPackage(@"c:\pkg.xml", null);
                // Review the configuration information.
                Configurations configs_After = pkg.Configurations;
                foreach(Configuration confAfter in configs_After)
                {
                    Console.WriteLine("ConfigurationString is {0}", confAfter.ConfigurationString);
                    Console.WriteLine("ConfigurationType is {0}", confAfter.ConfigurationType);
                    Console.WriteLine("CreationName is {0}", confAfter.CreationName);
                    Console.WriteLine("Description is {0}", confAfter.Description);
                    Console.WriteLine("Assigned ID is {0}", confAfter.ID);
                    Console.WriteLine("Name is {0}", confAfter.Name);
                }
            }
        }
    }
    
  2. Я закончил загрузку проекта вместо пакета и установку соединений из проекта в пакет, как показано ниже:

            private void SSISLoadData()
            {
                Project ssisProject = null;
                DTSExecResult pkgResults;
                try
                {
                    ssisProject = Project.OpenProject(@"D:\My Job\TDB\Integration Services Project\bin\Development\Integration Services Project.ispac");
                    Package pkg = ssisProject.PackageItems[0].LoadPackage(null);
                    for (int i = 0; i < ssisProject.ConnectionManagerItems.Count; i++)
                        pkg.Connections.Join(ssisProject.ConnectionManagerItems[i].ConnectionManager);
                    pkg.Connections[0].ConnectionString = dataFolderPath + "\*.csv";
                    pkg.Connections[1].ConnectionString = string.Format("Data Source =.; Initial Catalog = TDB; Provider = SQLNCLI11.1; Integrated Security = SSPI; Initial File Name = {0};", dbPath);
                    pkg.Connections[2].ConnectionString = string.Format("Data Source =.; Initial Catalog = TDBRawData; Provider = SQLNCLI11.1; Integrated Security = SSPI; Initial File Name = {0}\TDBRawData.mdf;", Environment.CurrentDirectory);
                    pkgResults = pkg.Execute();
                    MessageBox.Show(pkgResults.ToString());
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
                finally
                {
                    if (ssisProject != null)
                        ssisProject.Dispose();
                }
            }
    

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