5
我有一個C#程序使用SQL Server Management Objects(SMO)接口觸發SQL Server Agent作業。它看起來是這樣的:使用SMO.Agent檢索SQL作業執行狀態 - 安全問題
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在這一點上,而我工作了這一點,以simplfy事情。
現在,我的問題是,除非SERVER_USERNAME
是「系統管理員」 DBO角色的一部分,ssis_job.CurrentRunStatus
總是「Idle
」 - 甚至當我知道這個作業正在運行。它不會出錯,只是總是報告空閒。
如果用戶是管理員,則按預期返回狀態。
角色會員你說?
好吧,我添加了SERVER_USERNAME
SQL Server登錄到msdb角色SQLAgentOperatorRole,這似乎沒有幫助。
作業的所有者是一個系統管理員帳戶 - 如果這是問題,我不知道如何解決它。
任何想法?
上的[作業]在[刷新](http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx)方法(HTTP:// MSDN .microsoft.com/en-us/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx)對象修復了它。感謝您指出。 – 2014-11-13 17:27:09
如果我在開始()後立即調用Refresh()對我不起作用。它在我調試我的代碼時起作用。它可能是Start()和sql作業開始之間的延遲? – jambis 2015-06-12 19:30:15