我有一个C#程序使用SQL Server Agent(SMO)接口触发SQL Server Management Objects个作业。它看起来像:
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 Authentication来解决问题。
现在,我的问题是,除非SERVER_USERNAME
是'sysadmin'dbo角色的一部分,ssis_job.CurrentRunStatus
始终是'Idle
' - 即使我知道作业正在运行。它没有错误,只是总是报告空闲
如果用户是管理员,则按预期返回状态。
你说的角色会员资格?
好吧,我将SERVER_USERNAME
SQL Server登录添加到msdb Role SQLAgentOperatorRole,这似乎没什么帮助。
作业的所有者是系统管理员帐户 - 如果这是问题,我不知道如何解决它。
有什么想法吗?
答案 0 :(得分:3)
您需要在检查状态之前通过调用ssis_job上的Refresh()方法来刷新作业,然后您将获得正确的信息。