如何使用vs2010在SqlServer 2012中运行SSIS包?

时间:2013-08-05 18:03:54

标签: c# visual-studio-2010 ssis sql-server-2012

设置

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

  

\ Integration Services目录\ SSISDB \ DAT_Load \ Projects \ UploadSYS.dtsx

注意:vs2010不允许我选择在服务器中的任何位置部署程序包,然后仅在Integration Services目录中部署程序包。进入后,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目录\ SSISDB \ DAT_Load \ Projects \ UploadSYS.dtsx
  • \ SSISDB \ DAT_Load \项目\ UploadSYS.dtsx
  • \ DAT_Load \项目\ UploadSYS.dtsx

不能从命令行或存储过程运行它。

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

1 个答案:

答案 0 :(得分:9)

对问题采取另一种做法,但请参阅Set SSIS database package pathSSIS Organization进行背景阅读。

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

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

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

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