【问题标题】:Run a SQL Job From an asp.net mvc 4 web application从 asp.net mvc 4 Web 应用程序运行 SQL 作业
【发布时间】:2017-10-10 14:41:23
【问题描述】:

我需要一些帮助来弄清楚如何从 asp.net mvc Web 应用程序启动 SQL Server 代理作业。作业需要在单击按钮时启动。正确的做法是什么?

我刚刚安装了hangfire,我正在尝试对其进行配置,但我坚持使用以下代码。我走对了吗?

任何线索都会非常有帮助。谢谢。

public class MyController : Controller
{    
public void ExecJob(int Id)
    {
   BackgroundJob.Enqueue(() => UpdateDB(Id));  
    }

public void UpdateDB(Id)
    {
  //how to start the sql job
    }
}

【问题讨论】:

  • “sql 作业”是什么意思。您的意思是运行存储过程还是运行实际的 Sql Server 代理作业?
  • 我认为最好的办法是编写一个存储过程来调用 sql-server 作业。请注意,必须测试运行网站的帐户的“身份”以查看它是否可以启动 sql-server 作业。 PS 你学得越快,像 Quartz.Net 这样的东西,你就会越努力通过 sql-server-job 来捏造一切。
  • @STLDeveloper:一个 sql server 代理作业

标签: sql-server asp.net-mvc-4 hangfire sql-job


【解决方案1】:

您可以像这样使用 SqlCommand (asp.net):

var connection = new SqlConnection("<yourSqlConnectionString>");
var command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "msdb.dbo.sp_start_job";
command.Parameters.AddWithValue("@job_name", "<yourJobName>");

connection.Open();
command.ExecuteNonQuery();

(代码未经测试。)

可以使用storedprocedure "sp_start_job"来触发一个mssql-server-job。

【讨论】:

    【解决方案2】:

    您可以通过单击按钮从 Web 应用程序执行存储过程

    存储过程:

        CREATE PROCEDURE RunJob
           @JobName NVARCHAR(100)
        AS
        BEGIN
           -- SET NOCOUNT ON added to prevent extra result sets from
           -- interfering with SELECT statements.
           SET NOCOUNT ON;
    
           EXEC msdb.dbo.sp_start_job @JobName
        END
        GO
    

    在您的数据库中创建此存储过程并将作业名称作为参数传递,或者您可以在存储过程中硬编码作业名称以防止意外执行其他 SQL 作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多