Вызов заданий агента SQL

Я пытаюсь вызвать работу агента SQL из моего приложения C#.

Я хочу быть в состоянии.

  • Нажатием кнопки можно выполнить задание.

Но я также хочу получить какое-то сообщение о том, когда задание закончится или не выполнится.

Приведенный ниже код из другого Ответа не будет работать для меня, так как мне нужен доступ к локальной базе данных MSDB.

private Dictionary<int, string> ExecutionStatusDictionary = new Dictionary<int, string>()
{
{0, "Not idle or suspended"},
{1, "Executing"},
{2, "Waiting for thread"},
{3, "Between retries"},
{4, "Idle"},
{5, "Suspended"},
{7, "Performing completion actions"}
};

public string GetStatus()
{
SqlConnection msdbConnection = new SqlConnection("Data Source=GACDTL01CR585M;Initial       Catalog=msdb;Integrated Security=SSPI");
System.Text.StringBuilder resultBuilder = new System.Text.StringBuilder();

try
{
    msdbConnection.Open();

    SqlCommand jobStatusCommand = msdbConnection.CreateCommand();

    jobStatusCommand.CommandType = CommandType.StoredProcedure;
    jobStatusCommand.CommandText = "sp_help_job";

    SqlParameter jobName = jobStatusCommand.Parameters.Add("@job_name", SqlDbType.VarChar);
    jobName.Direction = ParameterDirection.Input;
    jobName.Value = "LoadRegions";

    SqlParameter jobAspect = jobStatusCommand.Parameters.Add("@job_aspect", SqlDbType.VarChar);
    jobAspect.Direction = ParameterDirection.Input;
    jobAspect.Value = "JOB";

    SqlDataReader jobStatusReader = jobStatusCommand.ExecuteReader();

    while (jobStatusReader.Read())
    {
        resultBuilder.Append(string.Format("{0} {1}",
            jobStatusReader["name"].ToString(),
            ExecutionStatusDictionary[(int)jobStatusReader["current_execution_status"]]
        ));
    }
    jobStatusReader.Close();
}
finally
{
    msdbConnection.Close();
}

return resultBuilder.ToString();
}

1 ответ

Решение

Использование ADO.NET не подходит для того, что вы хотите сделать. Вы должны использовать API объектов управления SQL Server (SMO ), что предпочтительнее при выполнении административных задач таким способом.

Точнее, вы должны взглянуть на SMOJob.Start метод. В статье есть образец того, как его использовать. Job класс предоставляет некоторые события (такие как SuccessAction) чтобы уведомить вас, когда работа будет завершена.

Другие вопросы по тегам