Вызов хранимой процедуры в пакете SSIS с входными параметрами

Я вызываю хранимую процедуру из пакета SSIS. Эта хранимая процедура имеет три входных параметра, таких как дата начала, дата окончания и строковая переменная.

Мы вызываем пакет SSIS из приложения .Net. Итак, мы должны передать параметры из кода C# в пакет SSIS, который, в свою очередь, передается в Storedprocedure.

Я ищу статьи и кодеров, чтобы предложить мне.


person goofyui    schedule 26.05.2011    source источник


Ответы (2)


Вот возможное решение. Вы можете объявить переменные в пакете SSIS и настроить хранимую процедуру для использования их в качестве входных переменных. Затем передайте значения в переменные из C#.

Вот пример:

В этом сценарии я вставляю штат и страну в таблицу, передавая значения из C#.

  1. В пакете SSIS создайте три параметра StoredProcedure, Country и State.
  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 показаны данные, вставленные в таблицу.

.

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

person Community    schedule 26.05.2011

См. информацию об объекте Application и Package объект, где Execute(Connections, Variables, IDTSEvents, IDTSLogging, Object)метод позволяет передавать параметры.

    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);
person Filip De Vos    schedule 26.05.2011
comment
Только что нашел эту ссылку и попробовал с этим. -editor.aspx" rel="nofollow noreferrer">geekswithblogs.net/stun/archive/2009/03/05/ - person goofyui; 27.05.2011