Asp.net core 在MVC中执行ssis包
下午, 是否可以使用MVC执行SSIS包?我正在创建的是一个web应用程序,它会有一个按钮,一旦单击,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
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