在上面的主題上搜索互聯網時,我發現兩種方法,兩者都工作正常,但我需要知道兩者之間的區別,哪一個適合什麼場合等。 。我們的工作需要一些時間,我需要一種方法來等待作業完成,然後再執行下一個C#行。從C運行Sql Server代理作業#
一種用法
var dbConn = new SqlConnection(myConString);
var execJob = new SqlCommand
{
CommandType = CommandType.StoredProcedure,
CommandText = "msdb.dbo.sp_start_job"
};
execJob.Parameters.AddWithValue("@job_name", p0);
execJob.Connection = dbConn;
using (dbConn)
{
dbConn.Open();
using (execJob)
{
execJob.ExecuteNonQuery();
Thread.Sleep(5000);
}
}
方法二
using System.Threading;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Smo.Agent;
var server = new Server(@"localhost\myinstance");
var isStopped = false;
try
{
server.ConnectionContext.LoginSecure = true;
server.ConnectionContext.Connect();
var job = server.JobServer.Jobs[jobName];
job.Start();
Thread.Sleep(1000);
job.Refresh();
while (job.CurrentRunStatus == JobExecutionStatus.Executing)
{
Thread.Sleep(1000);
job.Refresh();
}
isStopped = true;
}
finally
{
if (server.ConnectionContext.IsOpen)
{
server.ConnectionContext.Disconnect();
}
}
所以閱讀代碼@Rasika,你不明白什麼......你知道代碼在做什麼..?這是非常直接的.. – MethodMan
當然,第一個使用「sp_start_job」,第二個不是。可能是有利弊的。它使用不同的庫來做同樣的事情的兩種不同的方法。我想知道哪一個適合什麼場合等等......可能是第二種方法是最新的,這就是爲什麼要問。 – Rasika
然後查看'MSDN sp_start_job'也看起來像一個SQL代理正在運行第二個進程vs第一個你實際上通過C#代碼明確調用一個Sql存儲過程的東西我只能看到如果一個或另一個停止..那麼這就是我認爲唯一的辦法,你可以告訴哪個更好,也可以做一些分析,看看哪一個更快運行,資源更少。 – MethodMan