使用SMO.Agent检索SQL作业执行状态 - 安全问题

dal*_*ons 6 c# security jobs smo status

我有一个C#程序,它使用SQL Server管理对象(SMO)接口触发SQL Server代理作业.它看起来像:

Server ssis_server = new Server(
    new ServerConnection(SERVER_NAME, SERVER_USERNAME, SERVER_PASSWORD)
);

var agent = ssis_server.JobServer;
var ssis_job = agent.Jobs[job_name];

var current_status = ssis_job.CurrentRunStatus;

if (current_status == JobExecutionStatus.Idle)
{
    ssis_job.Start();
    OnSuccess("Job started: " + job_name);
}
else
{
    OnError("Job is already running or is not ready.");
}
Run Code Online (Sandbox Code Playgroud)

此时我正在使用SQL Server身份验证来简化操作.

现在,我的问题是,除非它SERVER_USERNAME是'sysadmin'dbo角色的一部分,ssis_job.CurrentRunStatus总是' Idle' - 即使我知道作业正在运行.它没有错误,只是总是报告空闲.
如果用户是管理员,则按预期返回状态.

你说的角色会员?
好吧,我将SERVER_USERNAMESQL Server登录添加到msdb Role SQLAgentOperatorRole,这似乎没有帮助.
作业的所有者是系统管理员帐户 - 如果这是问题,我不知道如何解决它.

有任何想法吗?

ste*_*ary 5

您需要在检查状态之前通过在siss_job上调用Refresh()方法来刷新作业,然后您将获得正确的信息。

  • [作业](http://msdn.microsoft.com) 上的[刷新](http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx) 方法com/en-us/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx) 对象为我修复了它。感谢您指出。 (2认同)