6

设置

我有一个可以从 Visual Studio 运行的 vs2010 SSIS 包。我已经将它部署到我的本地 2012 服务器,我也可以从 SSMS 执行该包。在 SSMS 中,我在这里看到了这个包:

\Integration Services Catalogs\SSISDB\DAT_Load\Projects\UploadSYS.dtsx

注意:vs2010 没有给我一个选项,可以在任何地方部署包,只能在服务器中,然后只能在集成服务目录中。在那里,MSDB 数据库在 sysssispackages 表中没有条目。

以前,启动 SSMS 并从那里运行包就足够了(右键单击并执行)。现在,我必须从 C# Web 应用程序执行此操作。此外,我需要通过事件捕获进度消息等。

努力

我能够确定如何设置事件捕获,并且我已经到了应该能够从代码执行包的地步:

    public DTSExecResult ExecutePackage(string packageName, HttpContextBase context)
    {
        string ppath = ConfigurationManager.AppSettings[packageName + "Package"];
        string pserv = ConfigurationManager.AppSettings[packageName + "Server"];
        string puser = ConfigurationManager.AppSettings[packageName + "User"];
        string ppass = ConfigurationManager.AppSettings[packageName + "Pwd"];
        _context = context;
        _pkgLocation = "";
        _app = new Application();
        _pkg = _app.LoadFromSqlServer(ppath, pserv, puser, ppass, _SSISEvents);
        _pkgResults = _pkg.Execute(_connections, _variables, _SSISEvents, _log, null);
        return _pkgResults;
    }

问题

我找不到包裹。当我到达 LoadFromSqlServer 语句时,我收到一条错误消息:

找不到文件夹“\Integration Services Catalogs\SSISDB\DAT_Load\Projects\UploadSYS.dtsx”

路径的变化也会发生同样的事情(变量 = ppath):

  • \Integration Services Catalogs\SSISDB\DAT_Load\Projects\UploadSYS.dtsx
  • \SSISDB\DAT_Load\Projects\UploadSYS.dtsx
  • \DAT_Load\Projects\UploadSYS.dtsx
  • 等等

从命令行或存储过程运行它不是一个选项。

那么,谁能告诉我这里缺少什么?Application 对象是否需要初始化某些东西?这甚至可能吗?

4

1 回答 1

9

再次解决这个问题,但请参阅 设置 SSIS 数据库包路径SSIS 组织以进行背景阅读。

在 SSIS 2012 之前,如果将包部署到 SQL Server,它们将存在于 msdb 中。用于与它们交互的 .NET API 在各个版本中是相同的。

在 2012 版 SSIS 中,我们有两种不同的部署模型。包部署,这是“经典”模型,并且完全支持。在 2005 上运行包的相同代码将适用于 2012 包部署模型项目。这是Microsoft.SqlServer.Dts.Runtime命名空间

您的代码正在尝试加载使用“项目部署模型”和“包部署模型”API 构建的 2012 解决方案。这是Microsoft.SqlServer.Management.IntegrationServices命名空间,两者不能混用。

您的选择是将您的项目切换回包部署模型或更新您的代码。在第一个链接问题中,我提供了用于在 SSISDB 目录中运行 SSIS 包的 VB.NET 实现。有一些方法可以运行 .ispac 文件,因为我看到了选项,dtexec但我没有看到具体的方法。这是 VS/SSDT 在本地运行包时使用的机制。

于 2013-08-06T04:53:46.677 回答