2010-02-04 106 views
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,這似乎沒有幫助。
作業的所有者是一個系統管理員帳戶 - 如果這是問題,我不知道如何解決它。

任何想法?

回答

3

你需要通過調用ssis_job刷新()方法檢查狀態之前刷新工作,那麼你會得到正確的信息。

+1

上的[作業]在[刷新](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

+0

如果我在開始()後立即調用Refresh()對我不起作用。它在我調試我的代碼時起作用。它可能是Start()和sql作業開始之間的延遲? – jambis 2015-06-12 19:30:15