【发布时间】:2011-05-26 19:48:35
【问题描述】:
我正在从 SSIS 包调用存储过程。此存储过程有三个输入参数,如开始日期、结束日期和字符串变量。
我们从 .Net 应用程序调用 SSIS 包。因此,我们必须将参数从 C# 代码传递给 SSIS 包,然后再传递给 Storedprocedure。
我正在寻找可以向我推荐的文章和程序员。
【问题讨论】:
标签: c# sql-server-2008 ssis
我正在从 SSIS 包调用存储过程。此存储过程有三个输入参数,如开始日期、结束日期和字符串变量。
我们从 .Net 应用程序调用 SSIS 包。因此,我们必须将参数从 C# 代码传递给 SSIS 包,然后再传递给 Storedprocedure。
我正在寻找可以向我推荐的文章和程序员。
【问题讨论】:
标签: c# sql-server-2008 ssis
这是一个可能的解决方案。您可以在 SSIS 包中声明变量并将存储过程设置为将它们用作输入变量。然后,将值从 C# 传递给变量。
这是一个例子:
在这种情况下,我通过从 C# 传递值将州和国家/地区插入到表中。
StoredProcedure、Country 和 State。EXEC dbo.InsertData @Country, @State 分配给变量StoredProcedure。请参阅屏幕截图 #1。Variable。User::StoredProcedure 分配给SourceVariable。请参阅屏幕截图 #2。Microsoft.SQLServer.ManagedDTS。.
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:
屏幕截图 #2:
屏幕截图 #2:
截图#3:
【讨论】:
查看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);
【讨论】: