use*_*910 21 c# sql-server winforms
我已xyz在SQL Server作业代理中安排了一个作业.现在我想从我的Windows应用程序调用该作业.
小智 29
拨打电话sp_start_job.
exec msdb.dbo.sp_start_job @job_name = 'YourJobName'
Run Code Online (Sandbox Code Playgroud)
SqlConnection DbConn = new SqlConnection(YourConnectionString);
SqlCommand ExecJob = new SqlCommand();
ExecJob.CommandType = CommandType.StoredProcedure;
ExecJob.CommandText = "msdb.dbo.sp_start_job";
ExecJob.Parameters.AddWithValue("@job_name", "YourJobName")
ExecJob.Connection = DbConn; //assign the connection to the command.
using (DbConn)
{
DbConn.Open();
using (ExecJob)
{
ExecJob.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用 sp_start_job 的方法是有效的,但它会遇到一个问题,因为您不知道作业何时完成。该方法将在调用后立即返回,而不是在完成时返回。如果这对您很重要,这里有一个使用 SQL Server 管理对象 (SMO) 的函数,该函数仅在作业完成时才返回。您需要添加对以下类的引用:
\n\nMicrosoft.SqlServer.Management.Sdk.Sfc\nMicrosoft.SqlServer.Smo\nMicrosoft.SqlServer.SqlEnum\xc2\xa0\nMicrosoft.SqlServer.ConnectionInfo\nRun Code Online (Sandbox Code Playgroud)\n\n这是代码:
\n\nImports System.Data.SqlClient\nImports Microsoft.SqlServer.Management.Common\nImports Microsoft.SqlServer.Management.Smo\nImports Microsoft.SqlServer.Management.Smo.Agent\n\npublic void RunSQLAgentJob(string JobName)\n{\n SqlConnection DbConn = new SqlConnection(connectionstring);\n ServerConnection conn;\n Job job;\n Server server;\n\n using (DbConn) {\n conn = new ServerConnection(DbConn);\n server = new Server(conn);\n job = server.JobServer.Jobs(JobName);\n // make sure it\'s not already running before starting it\n if (job.CurrentRunStatus == JobExecutionStatus.Idle) \n job.Start();\n while (job.CurrentRunStatus == JobExecutionStatus.Executing) {\n job.Refresh();\n Console.WriteLine($"Current status of {JobName} is {job.CurrentRunStatus.ToString}");\n System.Threading.Thread.Sleep(3000);\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n