在 ASP.NET 页面上跟踪 SQL Server 作业的进度

Posted

技术标签:

【中文标题】在 ASP.NET 页面上跟踪 SQL Server 作业的进度【英文标题】:Track progress of a SQL Server Job on an ASP.NET page 【发布时间】:2018-12-19 14:42:42 【问题描述】:

我有一个 ASP.net 页面,它上传一个 Excel 文件,然后执行一个 SQL Server 作业,然后启动一个 SSIS 包来导入它。 我可以检查 Job 是否启动或启动失败,但是如何跟踪它的进度,或者至少知道它是否已成功完成运行并在 ASP.net 页面上显示结果?

我的代码如下:

 protected void ProcessData(int num)
    
        SqlConnection jobConnection;
        SqlCommand jobCommand;
        SqlParameter jobReturnValue;
        SqlParameter jobParameter;
        int jobResult;

        //SSIS CONNECTION
        jobConnection = new SqlConnection("Data Source=.\\XX_XXX;Initial Catalog=msdb;Integrated Security=SSPI");
        jobCommand = new SqlCommand("sp_start_job", jobConnection);
        jobCommand.CommandType = CommandType.StoredProcedure;

        jobReturnValue = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
        jobReturnValue.Direction = ParameterDirection.ReturnValue;
        jobCommand.Parameters.Add(jobReturnValue);

        jobParameter = new SqlParameter("@job_name", SqlDbType.VarChar);
        jobParameter.Direction = ParameterDirection.Input;
        jobCommand.Parameters.Add(jobParameter);
        jobParameter.Value = "RunXXX_Package0" + num;

        jobConnection.Open();
        jobCommand.ExecuteNonQuery();
        jobResult = (Int32)jobCommand.Parameters["@RETURN_VALUE"].Value;
        switch (jobResult)
        
            case 0:
                Label2.Text = "SQL Server Agent job, RunXXX_Package0" + num + " started successfully.";
                break;
            default:
                Label2.Text = "SQL Server Agent job, RunXXX_Package0" + num + "  failed to start.";
                break;
        
        jobConnection.Close();

    

【问题讨论】:

【参考方案1】:

让 SSIS 包将其进度写入执行日志(或历史)表(您必须设计)。

然后让您的 ASP 页面读取表格。

【讨论】:

是的,这是我正在考虑的一个选项,我想知道它 SSIS 有某种额外的 API/回调函数来通知调用者它的进度或至少结果...... 我不知道。 我也是。 “sp_start_job”过程只返回 0 或 1,无论 Job 启动还是失败 如果您使用的是项目部署模型,您可以让 asp 页面查询 SSISDB 中的某个表以查看进度。 我可以在 SSIS 中实现登录到表中,然后我可以简单地查询 dbo.sysssislog 表以查找正确的消息(至少是“PackageEnd”事件...)【参考方案2】:

您可以通过投票[sp_help_job][1] 获取信息:

EXEC msdb.dbo.sp_help_job @Job_name = 'YourJobName'

然后检查 execution_status

0 - Returns only those jobs that are not idle or suspended.
1 - Executing.
2 - Waiting for thread.
3 - Between retries.
4 - Idle.
5 - Suspended.
7 - Performing completion actions.

last_run_outcome

0 = Failed
1 = Succeeded
3 = Canceled
5 = Unknown

【讨论】:

以上是关于在 ASP.NET 页面上跟踪 SQL Server 作业的进度的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL asp.net 页面导出数据到 excel 会截断 < 字符上的数据

如何在已部署的 ASP.Net 应用程序上跟踪错误?

ASP.NET 回发会丢失 URL 中的哈希值

JavaScript、asp.net 和 Sql Server

使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是不是为空

ABP vue+asp.net core yarn serve报 Cannot find module 'typescript/package.json错误