在上面的主题上搜索互联网时,我发现两种方法,两者都工作正常,但我需要知道两者之间的区别,哪一个适合什么场合等。 。我们的工作需要一些时间,我需要一种方法来等待作业完成,然后再执行下一个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