2
votes

exécuter le package ssis dans MVC

Après-midi,

Est-il possible d'exécuter un package SSIS à l'aide de MVC? Ce que je crée est une application Web et elle aurait un bouton, une fois cliqué, le package SSIS s'exécute.

Le projet SSIS est déjà configuré et déployé sur le serveur MSSQL.


2 commentaires

Déployé sur SSISDB ou msdb? La page Web doit-elle attendre la fin de l'exécution? La page a-t-elle besoin de passer des paramètres pour influencer le comportement du package ou est-ce que le démarrage suffit?


@theJ Upvote - bonne question. Je suis curieux, à partir d'un cas d'utilisation abusive, quel est le comportement attendu si l'utilisateur clique plusieurs fois sur le bouton ou essaie d'exécuter le travail avant qu'il ne se termine? Serait-il possible d'exécuter le travail selon un calendrier toutes les n minutes?


4 Réponses :


2
votes

Vous pouvez simplement créer une procédure stockée que vous pouvez appeler à partir de votre application MVC avec SQLClient ou plus. Dans cette procédure stockée, vous pouvez ensuite lancer le package SSIS (voir le lien ci-dessous pour une description plus détaillée sur la façon de procéder)

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


2 commentaires

C'est juste une application console. Pas vraiment ce que je cherche à réaliser.


Pourquoi cela ne s'appliquerait-il pas à MVC, derrière tout simplement .NET? c'est juste un appel avec System.Data.SqlClient à une procédure stockée. Vous pouvez également utiliser EF pour appeler le proc stocké.



4
votes

SQL Server 2012+ offre un mécanisme fantastique pour gérer les packages et leur exécution via le catalogue Integration Services, SSISDB.

Le code suivant fournit un exemple d'exécution du package (Package2.dtsx) à partir du projet SSIS MyProjectName vivant sous le dossier Demo avec un paramètre de package IntensityLevel est passé à 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;

Le moyen le plus simple d'obtenir un exemple de la façon dont le SQL ci-dessus doit être construit est d'ouvrir SQL Server Management Studio (SSMS) et configurez une exécution du package SSIS. Accédez au catalogue Integration Services et recherchez le package que vous souhaitez exécuter. Cliquez avec le bouton droit de la souris et sélectionnez Exécuter ...

 Execute Package

Le menu Configuration s'ouvre et trouve le (s) paramètre (s) que vous souhaitez spécifier. Fournissez un exemple de valeur mais NE CLIQUEZ PAS SUR OK. À la place, cliquez sur ce bouton Script et spécifiez le script dans la nouvelle fenêtre (ou le presse-papiers)

Configurer l'exécution

Vous avez maintenant les commandes exactes que SSMS aurait émis pour exécuter votre package. Prenez ce code, utilisez la méthode de paramétrage de votre choix pour que votre programme MVC stubbing dans la valeur d'exécution correcte pour votre paramètre, puis enveloppez tout ce TSQL dans un simple appel à la base de données (ole, ado, odbc cela n'a pas d'importance)


0 commentaires

0
votes

C # peut être utilisé pour exécuter un package déployé sur SSISDB comme suit. La connexion initiale créée dans l'objet SqlConnection sera le serveur sur lequel le package est déployé. Dans l'exemple ci-dessous, le ObjectType de 30 est utilisé pour un paramètre de package. Cela peut être changé en 20 pour un paramètre au niveau du projet.

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);


1 commentaires

C'est pour une application console que vous ne pouvez pas ajouter à l'aide de Microsoft.SqlServer.Management.IntegrationServices; dans MVC



1
votes

J'ai créé une procédure stockée qui exécute le package SSIS. Dans MVC, il appelle la procédure stockée -

[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();
}

Ce lien a été d'une grande aide pour création de la procédure.

Cette une a aidé à renvoyer le message à l'utilisateur.


0 commentaires