使用输入参数在SSIS包中调用存储过程

时间:2011-05-26 19:48:36

标签: c# sql-server-2008 ssis

我正在从SSIS包调用Storedprocedure。这个storedprocedure有三个输入参数,如Start Date,End Date和String Variable。

我们正在从.Net应用程序调用SSIS包。因此,我们必须将参数从C#代码传递给SSIS包,而SSIS包又传递给Storedprocedure。

我正在寻找建议我的文章和程序员。

2 个答案:

答案 0 :(得分:4)

这是一个可能的解决方案。您可以在SSIS包中声明变量并设置存储过程以将它们用作输入变量。然后,将值传递给C#中的变量。

以下是一个例子:

在这种情况下,我通过传递C#中的值来将州和国家/地区插入表中。

  1. 在SSIS包上,创建三个参数StoredProcedureCountryState
  2. 将值EXEC dbo.InsertData @Country, @State分配给变量StoredProcedure。请参阅屏幕截图# 1
  3. 将执行SQL任务拖放到“控制流”选项卡上。
  4. 执行SQL任务编辑器上,将其配置为使用 ADO.NET 连接。
  5. SQLSourceType 更改为Variable
  6. User::StoredProcedure分配给 SourceVariable 。请参阅屏幕截图# 2
  7. 请参阅屏幕截图# 3 ,了解参数映射部分的配置方式。
  8. 在C#中,您可以传递参数值,如下所示。此代码需要引用DLL Microsoft.SQLServer.ManagedDTS
  9. 屏幕截图# 4 显示插入表中的数据。
  10. using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SqlServer.Dts.Runtime;
    
    namespace CS.ExecuteSSIS
    {
        class Program
        {
            static void Main(string[] args)
            {
                Application app = new Application();
    
                Package package = app.LoadPackage(@"C:\Learn\SSIS\Learn.SSIS\Learn.SSIS\CallFromCS.dtsx", null);
                Variables vars = package.Variables;
                vars["Country"].Value = "US";
                vars["State"].Value = "California";
    
                DTSExecResult result = package.Execute();
    
                Console.WriteLine("Package Execution results: {0}", result.ToString());
            }
        }
    }
    

    存储过程 dbo.InsertData:

    CREATE PROCEDURE [dbo].[InsertData]
    (
            @Country    NVARCHAR(50)
        ,   @State      NVARCHAR(50)        
    )
    AS
    BEGIN
        SET NOCOUNT ON;
    
        INSERT INTO dbo.SSISUsingCS (Country, State) VALUES(@Country, @State)
    END
    

    希望有所帮助。

    屏幕截图#1:

    1

    屏幕截图#2:

    2

    屏幕截图#2:

    3

    屏幕截图#3:

    4

答案 1 :(得分:0)

请参阅Application object以及Package object允许传递参数的Execute(Connections, Variables, IDTSEvents, IDTSLogging, Object) method上的信息。

    var app = new Application();
    Package myPackage = app.LoadFromSqlServer("myPackage", "server", "login", "password", null);

    Variables params = myPackage.Variables;
    params["StartDate"].Value = DateTime.Now;
    params["EndDate"].Value = DateTime.Now;
    params["StringVariable"].Value = "ooh a string";

    var packageResult = myPackage.Execute(null, params, null, null, null);