首页 > 解决方案 > 以特定用户身份从 .NET(使用 SSISDB 目录)执行 SSIS 包

问题描述

我有一个简单的 SSIS 包,其中包含一个数据流任务。这从 csv 文件中读取数据并将其转储到数据库表中。我已将其部署到 SSISDB 目录并从 .NET 运行:

      string targetServerName = "MyServerName";
      string folderName = "TestFolder";
      string projectName = "TestProject";
      string packageName = "TestPackage";

      string sqlConnectionString = "Data Source=" + targetServerName + ";Initial Catalog=master;Integrated Security=SSPI;";
      using (var sqlConnection1 = new SqlConnection(sqlConnectionString))
      {
        //Set up connection to package
        IntegrationServices integrationServices1 = new IntegrationServices(sqlConnection1);
        Catalog catalog = integrationServices1.Catalogs["SSISDB"];
        CatalogFolder folder = catalog.Folders[folderName];
        ProjectInfo project = folder.Projects[projectName];
        PackageInfo package = project.Packages[packageName];

        //Set up parameters
        Collection<PackageInfo.ExecutionValueParameterSet> executionParameters = new Collection<PackageInfo.ExecutionValueParameterSet>();
        executionParameters.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "SYNCHRONIZED", ParameterValue = 1 });
        executionParameters.Add(new PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "LOGGING_LEVEL", ParameterValue = 3 });

        // Run the package
        long executionID = package.Execute(false, null, executionParameters);
      }

如果源 csv 文件本地存储在 SQL Server 上,这可以正常工作。但是,如果源 csv 文件位于网络位置,我会收到“无法打开数据文件”错误(可能是因为集成服务执行包的用户没有网络位置的权限)。

是否可以使用上面的 .NET 代码执行 SSIS 包,指定具有访问网络位置所需权限的特定 Windows 用户?

(我知道我可以设置一个 SQL 代理作业并使用一个代理帐户,但我想沿着 .NET 路线走,因为我正在将现有项目从 SQL Server 2008 升级到 2016)。

标签: c#.netsql-serverssis

解决方案


推荐阅读