Поделиться через


SMO Sample: Create and Start a Job

Purpose of sample: Create simple job and start the job after creation.

 

Server svr = new Server(instance);
JobServer agent = svr.JobServer;

if (agent.Jobs.Contains("New Smo Job"))
{
agent.Jobs["New Smo Job"].Drop();
}

Job j = new Job(agent, "New Smo Job");
JobStep js = new JobStep(j, "Step 1");
js.SubSystem = AgentSubSystem.TransactSql;
js.Command = "select 1";
j.Create();
j.ApplyToTargetServer(svr.Name);

j.Start();

Disclaimer: this sample doesn't handle exceptions and may not function as expected. Use at own risk. It is good practice to test an application before using it in production.

Comments

  • Anonymous
    January 28, 2006
    Thank you. You code was for me big simplify and it was propably only one I found. Once again thanks. I didn't know how to get to earlier created job in SQL and run it.

  • Anonymous
    November 25, 2007
    ur blog was a lifesaver!!!was stuck with this problem for quite a while!!

  • Anonymous
    January 02, 2008
    Hi, Your sample is so simple to understand. Can you please tell me how to start the jobs that are already created in sql server. And other thing is, The jobs is started already and it has failed in a particular step. In this situation how can I start the job from this particular step. Please help me in this scenerios. Thanks.

  • Anonymous
    February 29, 2008
    Hi! Thanks for your script, but it's not work for me with error Start failed for Job 'New Smo Job' because in the job instance has not contained any steps... And it's work fine:                Server sqlServer = new Server(strServerName);                JobServer jobServer = sqlServer.JobServer;                if (jobServer.Jobs.Contains("New Smo Job"))                {                    jobServer.Jobs["New Smo Job"].Drop();                }                Job j = new Job(jobServer, "New Smo Job");                j.Create();                JobStep js = new JobStep(j, "Step 1");                js.SubSystem = AgentSubSystem.TransactSql;                js.Command = "select 1";                js.Create();                j.ApplyToTargetServer(sqlServer.Name);                j.Start();

  • Anonymous
    May 15, 2008
    I used your code to create a job but I add a shedule to start it frequently like this: public void CreateJob_Sql_Periodique(string JName, string dbName, string dName, travail t, DateTime Date, TimeSpan Heure, FrequencyTypes F, int i)        {            //création d'un job            Job SQLJob = new Job(MonServeur.JobServer, JName);            //pas besoin de connecter au serveur            //MonServeur.ConnectionContext.Connect();            //définir les propriétés du job            SQLJob.Description = "Chek And Back Up " + dbName;            SQLJob.Category = "Database Maintenance";            SQLJob.UserData = t;// le nom de la base de donnée et le dossier de sauvegarde            //créer le job sur le serveur Sql Agent            SQLJob.Create();            //définir les jobsteps du Job            JobStep aJobStep = new JobStep(SQLJob, "Step 1: Backup the Database");            //le type de la commande            aJobStep.SubSystem = AgentSubSystem.TransactSql;            //chaîne de caractère de la commande            string sExt = "EXEC master.dbo.xp_sqlmaint '-S " + DataSource + " -U " + User + " -P " + Password + " -D " + dbName + " -CkDB -CkAl -CkCat -BkUpMedia DISK -BkUpDB " + dName + "  -BkExt BAK -DelBkUps 2weeks -BkUpOnlyIfClean -Rpt " + dName + @"" + "BackDB_Checks.txt'";            aJobStep.Command = sExt;            aJobStep.OnSuccessAction = StepCompletionAction.QuitWithSuccess;            aJobStep.OnFailAction = StepCompletionAction.QuitWithFailure;            //créer le Jobstep            aJobStep.Create();            //création d'une planification            JobSchedule SQLSchedule = new JobSchedule(SQLJob, "BackupA_" + dbName);            SQLSchedule.FrequencyTypes = F;            if (F == FrequencyTypes.Daily)            {                SQLSchedule.FrequencySubDayTypes = FrequencySubDayTypes.Hour;                SQLSchedule.FrequencySubDayInterval = 1;                SQLSchedule.FrequencyInterval = i;            }            else                if (F == FrequencyTypes.Weekly)                {                    SQLSchedule.FrequencyInterval = 2;                    SQLSchedule.FrequencyRecurrenceFactor = i;                }            // pour hebdomadaire ou mensuel            //SQLSchedule.FrequencyRecurrenceFactor = r;            SQLSchedule.ActiveStartDate = Date;            SQLSchedule.ActiveStartTimeOfDay = Heure;            //  this schedule has no end time or end date            SQLSchedule.ActiveEndDate = new DateTime(9999, 12, 30);            SQLSchedule.ActiveEndTimeOfDay = new TimeSpan(23, 59, 0);            SQLJob.JobSchedules.Refresh();            SQLSchedule.Create();            //appliquer les modifications au serveur            SQLJob.ApplyToTargetServer(DataSource);            SQLJob.Refresh();            MessageBox.Show("Planification de sauvegarde crée avec succes");            MessageBox.Show(sExt);        }