6

我有一个 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.");
}

我现在使用SQL Server 身份验证来简化事情,同时解决这个问题。

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

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

有任何想法吗?

4

1 回答 1

6

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

于 2013-02-01T16:29:03.360 回答