выполнить пакет ssis в MVC - PullRequest
       20

выполнить пакет ssis в MVC

0 голосов
/ 13 февраля 2019

После полудня,

Возможно ли выполнить пакет служб SSIS с использованием MVC?То, что я создаю, - это веб-приложение, в котором после нажатия кнопки SSIS запускается кнопка.

Проект SSIS уже настроен и развернут на сервере MSSQL.

Ответы [ 4 ]

0 голосов
/ 21 февраля 2019

Я создал хранимую процедуру, которая запускает пакет служб SSIS.В MVC он вызывает хранимую процедуру -

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index()
{
    //code that updates DB

    #region Run Stored Procedure
    //connect to the SQL server
    var connection = new SqlConnection(_configuration.GetConnectionString("DatabaseConnection"));
    //command that runs procedure on the SQL server
    var command = new SqlCommand("RebuildSelection", connection)
    {
        CommandType = CommandType.StoredProcedure,
        CommandText = "RebuildSelection"
    };
    //get text from stored procedure to show success/error messages
    SqlParameter text = new SqlParameter("@Text", SqlDbType.NVarChar, 1000)
    {
        //output as its displayed to the user
        Direction = ParameterDirection.Output
    };
    //add the params
    command.Parameters.Add(text);
    connection.Open();
    //run query
    command.ExecuteNonQuery();
    //used to return success/error messages to user
    ViewData["Message"] = text.Value;
    connection.Close();
    #endregion

    return View();
}

Эта ссылка была большой помощью для создания процедуры.

Эта одна помогла ввозвращение сообщения пользователю.

0 голосов
/ 13 февраля 2019

SQL Server 2012+ предлагает фантастический механизм для управления пакетами и их выполнения через каталог служб Integration Services, SSISDB.

В следующем коде представлен пример запуска пакета (Package2.dtsx) из SSIS MyProjectNameПроект, находящийся в папке Demo с параметром пакета IntensityLevel, поднялся до 11.

DECLARE @execution_id bigint;

EXEC SSISDB.catalog.create_execution
    @package_name = N'Package2.dtsx'
,   @execution_id = @execution_id OUTPUT
,   @folder_name = N'Demo'
,   @project_name = N'MyProjectName'
,   @use32bitruntime = False
,   @reference_id = NULL;

DECLARE @var0 int = 11;

EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 30
,   @parameter_name = N'IntensityLevel'
,   @parameter_value = @var0;

DECLARE @var1 smallint = 1;

EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 50
,   @parameter_name = N'LOGGING_LEVEL'
,   @parameter_value = @var1;

EXEC SSISDB.catalog.start_execution
    @execution_id;

Простой способ получить пример того, как должен быть построен вышеупомянутый SQL, - открыть SQL Server Management Studio (SSMS).) и настройте запуск пакета служб SSIS.Перейдите в каталог служб Integration Services и найдите пакет, который вы хотите запустить.Щелкните правой кнопкой мыши и выберите Выполнить ...

Execute Package

Откроется меню конфигурации и найдите параметры, которые вы хотите указать.Укажите примерное значение, но НЕ НАЖИМАЙТЕ ОК.Вместо этого нажмите эту кнопку «Сценарий» и укажите сценарий для нового окна (или буфера обмена)

Configure Execution

Теперь у вас есть точные команды, которые SSMS выдала бы для запускаваш пакетВозьмите этот код, используйте выбранный метод параметризации, чтобы ваша MVC-программа заглушала правильное значение времени выполнения для вашего параметра, а затем оберните весь этот TSQL простым вызовом базы данных (ole, ado, odbc, это не имеет значения)

0 голосов
/ 13 февраля 2019

C # может использоваться для выполнения пакета, развернутого в SSISDB, следующим образом.Первоначальное соединение, созданное в объекте SqlConnection, будет сервером, на котором развернут пакет.В приведенном ниже примере ObjectType из 30 используется для параметра пакета.Это можно изменить на 20 для параметра на уровне проекта.

using System.Data.SqlClient;
using Microsoft.SqlServer.Management.IntegrationServices;
using System.Collections.ObjectModel;

        string folder = "Folder of Package";
        string project = "Project Of Package";
        string packageName = "PackageName.dtsx";
        string packageParameter = "ParameterValue";

        // server where package is deployed
        SqlConnection connString = new SqlConnection(@"Data Source=ServerWherePackageDeployed;Initial Catalog=SSISDB;Integrated Security=SSPI;");
        IntegrationServices ssisConnString = new IntegrationServices(connString);

        //create PackageInfo object for package to execute
        Microsoft.SqlServer.Management.IntegrationServices.PackageInfo package = ssisConnString.Catalogs["SSISDB"].Folders[folder].Projects[project].Packages[packageName];

        Collection <Microsoft.SqlServer.Management.IntegrationServices.PackageInfo.ExecutionValueParameterSet> parameterList = new Collection<Microsoft.SqlServer.Management.IntegrationServices.PackageInfo.ExecutionValueParameterSet>();

        //set logging level to basic
        parameterList.Add(new Microsoft.SqlServer.Management.IntegrationServices.PackageInfo.ExecutionValueParameterSet { ObjectType = 50, ParameterName = "LOGGING_LEVEL", ParameterValue = 1 });

        parameterList.Add(new Microsoft.SqlServer.Management.IntegrationServices.PackageInfo.ExecutionValueParameterSet { ObjectType = 30, ParameterName = "ParameterName", ParameterValue = packageParameter });

        package.Execute(false, null, parameterList);
0 голосов
/ 13 февраля 2019

Вы можете просто создать хранимую процедуру, которую можно вызывать из приложения MVC с помощью SQLClient или около того. Затем в этой хранимой процедуре вы можете запустить пакет служб SSIS (более подробную информацию о том, как это сделать, см. По ссылке ниже).

https://www.mssqltips.com/sqlservertip/2992/how-to-execute-an-integration-services-ssis-package-from-a-sql-server-stored-procedure/

...