Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在MVC中执行ssis包_Asp.net Core_Ssis_.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 在MVC中执行ssis包

Asp.net core 在MVC中执行ssis包,asp.net-core,ssis,.net-core,asp.net-core-mvc,Asp.net Core,Ssis,.net Core,Asp.net Core Mvc,下午, 是否可以使用MVC执行SSIS包?我正在创建的是一个web应用程序,它会有一个按钮,一旦单击,SSIS包就会运行 SSIS项目已经在MSSQL服务器上设置和部署。您只需创建一个存储过程,就可以使用SQLClient或其他工具从MVC应用程序调用该存储过程。。 在此存储过程中,您可以启动SSIS包。有关如何执行此操作的详细说明,请参阅下面的链接 SQL Server 2012+通过集成服务目录SSIDB提供了一种极好的机制来管理包及其执行 下面的代码提供了一个示例,该示例使用Intensi

下午,

是否可以使用MVC执行SSIS包?我正在创建的是一个web应用程序,它会有一个按钮,一旦单击,SSIS包就会运行


SSIS项目已经在MSSQL服务器上设置和部署。

您只需创建一个存储过程,就可以使用SQLClient或其他工具从MVC应用程序调用该存储过程。。 在此存储过程中,您可以启动SSIS包。有关如何执行此操作的详细说明,请参阅下面的链接


SQL Server 2012+通过集成服务目录SSIDB提供了一种极好的机制来管理包及其执行

下面的代码提供了一个示例,该示例使用IntensityLevel package参数设置为11,从位于Demo文件夹下的MyProjectName SSIS项目运行Package2.dtsx包

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的示例的简单方法是打开SQLServerManagementStudio SSMS并配置SSIS包的运行。导航到Integration Services目录并找到要运行的包。右键单击并选择执行

此时会打开“配置”菜单,找到要指定的参数。提供示例值,但不要单击“确定”。相反,单击该脚本按钮并指定脚本到新窗口或剪贴板


现在您拥有了SSMS为运行包而发出的确切命令。使用这些代码,使用您选择的参数化方法,让MVC程序为您的参数输入正确的运行时值,然后将所有TSQL封装在一个简单的数据库调用ole、ado、odbc中。无所谓。

C可用于执行部署到SSIDB的包,如下所示。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);

我创建了一个运行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();
}
这对创建程序有很大帮助


这有助于将消息返回给用户。

是否部署到SSIDB或msdb?网页是否需要等待执行完成?页面是否需要传递参数来影响包的行为,或者启动它就足够了?@theJ Upvote-好问题。我很好奇,从一个错误的用例来看,如果用户多次点击按钮或者试图在作业完成之前运行作业,那么预期的行为是什么?是否有可能让作业按计划每n分钟运行一次?这只是一个控制台应用程序。这并不是我想要实现的目标。为什么MVC不适用于它,它的背后只是.NET?这只是使用System.Data.SqlClient调用存储过程。您还可以使用EF调用存储的进程,即对于无法使用Microsoft.SqlServer.Management.IntegrationServices添加的控制台应用程序;进入MVC