0

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

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

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

4

4 回答 4

4

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

这篇MSDN 文章详细解释了如何通过 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 包中。

于 2013-03-06T16:41:39.453 回答
1

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

阅读MSDN 上的文章以编程方式构建包以了解更多详细信息。

我觉得通过这些 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。所以我只需将所需的 DLL 粘贴到我的 Web 服务器上并引用它们。正确的 ?

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

于 2013-03-06T16:48:03.133 回答
1

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

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

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

https://github.com/thevinnie/SyncDatabases

查看“BuildingAPackage”和“BuildALookupPackage”

于 2013-03-06T16:42:17.430 回答
0

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

于 2015-04-15T17:01:10.020 回答