Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用vs2010在SQLServer2012中运行SSIS包? 安装程序_C#_Visual Studio 2010_Ssis_Sql Server 2012 - Fatal编程技术网

C# 如何使用vs2010在SQLServer2012中运行SSIS包? 安装程序

C# 如何使用vs2010在SQLServer2012中运行SSIS包? 安装程序,c#,visual-studio-2010,ssis,sql-server-2012,C#,Visual Studio 2010,Ssis,Sql Server 2012,我有一个可以从VisualStudio运行的vs2010 SSIS包。我已经将它部署到本地2012服务器上,我还可以从SSMS执行该包。在SSMS中,我在这里看到包: \集成服务目录\SSISDB\DAT\u Load\Projects\UploadSYS.dtsx 注意:vs2010不允许我在任何地方部署包,只能在服务器中部署,然后仅在Integration Services目录中部署。进入后,MSDB数据库在sysssippackages表中没有条目 以前,打开SSM并从那里运行包(右键单击

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

\集成服务目录\SSISDB\DAT\u Load\Projects\UploadSYS.dtsx

注意:vs2010不允许我在任何地方部署包,只能在服务器中部署,然后仅在Integration Services目录中部署。进入后,MSDB数据库在sysssippackages表中没有条目

以前,打开SSM并从那里运行包(右键单击并执行)就足够了。现在,我必须从一个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\ssidb\DAT\u Load\Projects\UploadSYS.dtsx”

路径中的变化也会发生同样的情况(variable=ppath):

  • \集成服务目录\SSISDB\DAT\u Load\Projects\UploadSYS.dtsx
  • \SSISDB\DAT\u Load\Projects\UploadSYS.dtsx
  • \DAT\U Load\Projects\UploadSYS.dtsx
  • 等等
从命令行或存储过程运行此操作不是一个选项


那么,有人能告诉我这里缺少什么吗?应用程序对象是否需要初始化某些内容?这是可能的吗?

再次探讨这个问题,但请参阅和以获取背景资料

在SSIS 2012之前,如果包被部署到SQL Server,那么它们就存在于msdb中。与它们交互的.NETAPI在不同版本中是相同的

随着SSIS 2012版的发布,我们有两种不同的部署模型。包部署是一种“经典”模型,它是活跃的,并且完全受支持。在2005年运行包的代码同样适用于2012包部署模型项目。这是名称空间

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


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

我认为我缺少一些东西。我设置了一个断点并运行了FolderExistsOnSqlServer命令,以查看实际存在哪些文件夹。惊喜Integration Services目录下的文件夹不是FolderExistsOnSqlServer的位置。我只能假设所有的DTS方法都是如此。现在,我如何将我的包从ISC导入MSDB?MSDB=包部署模型。SSIDB=项目部署模型。一旦部署,您与它们交互的方式就不同了。最终,您的问题是:如何通过C#以编程方式在项目部署模型中运行SSIS包?我理解。我之前偶然发现了IntegrationServicesDLL,但我对它与Dts.Runtime api的区别感到困惑。而且,由于我的声誉低于15,我不能投票支持你的答案,因为它是值得的别担心。如果这解决了您的问题,您可以单击复选标记,将问题标记为已解决(您将获得2次重复)。否则,让我知道我还能做些什么来改进这个答案。因此,我能够将VB代码翻译成我的C#app。非常感谢@billinkc。不幸的是,我看不出如何捕获从包中激发的事件。这里必须做更多的研究。如果这在IntegrationServices api中是不可能的,那么我需要返回Dts api并创建一个已部署的包。尽管如此,您已经回答了这个问题,并为我提供了一条在我必须忽略事件时可以使用的路径。天哪,该死的SSIS。。。