如何从外部应用程序运行SSIS包?

时间:2013-03-06 16:31:32

标签: ssis

我正在编写一个接受各种格式文件的应用程序。然后我为每种格式(csv,excel,xml)编写代码以将其转换并输入到SQL Server数据库中。这很好,但我只是在研究SSIS并想知道这是否会有所帮助。

主要问题是如何在我自己的代码中运行这些包?传递参数容易吗?如果我将此Web应用程序移动到另一台服务器上它是否依赖于该服务器上的其他组件(可能安装了SQL Server 2012)?或者它只是我可以从我的网络应用程序引用的一些DLL?

我看到的所有演示都是关于使用SSIS工具,但我更感兴趣的是用我的代码中的参数调用包是多么困难。

4 个答案:

答案 0 :(得分:4)

BIDS / SSDT安装包括一个完整的客户端SDK,通过代码运行SSIS包非常简单。

这个MSDN article详细解释了如何通过C#加载和运行包,但实际代码归结为:

using Microsoft.SqlServer.Dts.Runtime;

   .
   .
   .

Application app = new Application();
Package pkg = app.LoadPackage(PKG_FILE_NAME, null);
DTSExecResult pkgResults = pkg.Execute();

Package对象有很多可以查看的属性和方法,特别是有一个Parameters集合,允许您在执行之前将参数传递到SSIS包中。

答案 1 :(得分:1)

有一个非常酷的库,名为EzAPI,您可以在其中生成自己的包并在C#中调用它们。它为您提供了动态生成SSIS并执行的灵活性。

http://sqlsrvintegrationsrv.codeplex.com/releases/view/21238

我在这个项目中构建了几个控制台应用程序来测试其中的一些方法,你可能会发现这些示例很有用:

https://github.com/thevinnie/SyncDatabases

查看“BuildingAPackage”和“BuildALookupPackage”

答案 2 :(得分:1)

您可以使用C#或VB.NET以编程方式构建SSIS包,然后运行包。您还可以以编程方式加载现有包以执行它。我没有这种方式构建软件包的经验,因为大多数软件包都可以使用以下工具轻松构建。

阅读MSDN上的文章Building Packages Programmatically了解更多详情。

我觉得通过这些IDE构建软件包比较容易,具体取决于您所针对的SSIS版本。您还可以通过SQL Server导入和导出向导创建初始包,并将SSIS包保存到本地磁盘,以后可以根据需要进行修改。

SSIS Version        Development IDE                                 Visual Studio Shell
------------------- ----------------------------------------------- -------------------
SSIS 2005           Business Intelligence Development Studio (BIDS) Visual Studio 2005 
SSIS 2008 - 2008 R2 Business Intelligence Development Studio (BIDS) Visual Studio 2008 
SSIS 2012           SQL Server Data Tools (SSDT)                    Visual Studio 2010

您需要在代码中引用相应的SSIS特定DLL来创建/加载SSIS包。

但是,您需要 SQL Server Integration Services 许可才能运行该程序包。您不能单独引用DLL。许可证通常是SQL Server许可证的一部分,如果您已经拥有许可证。

对您的评论的回复:

  

我们将在单独的服务器上安装SQL 2012或2008R2。所以我只需要在我的Web服务器上粘贴所需的DLL并引用它们。对吗?

包将在该服务器上执行。您只是远程调用来执行它们,您应该在Web /其他形式的外部应用程序中的代码中引用相应的DLL。我通常将程序包安排在 SQL Server代理作业下的数据库服务器上运行。如果这是您的选择,您可以试试。

答案 3 :(得分:0)

包参数是外​​部应用程序的只读参数。你需要将它们作为变量传递(我已经完成了)。如果您正在处理带有参数的现有包,您可以考虑编写一个脚本任务来填充变量中的参数(我还没有这样做)。