0

C# アプリケーションから SQL エージェント ジョブを呼び出そうとしています。

できるようになりたい。

  • ボタンを押すだけで、ジョブを実行できます。

しかし、ジョブの実行が終了したときや失敗したときのメッセージも必要です。

ローカルの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();
}
4

1 に答える 1

1

ADO.NET の使用は、やりたいことには適していません。この方法で管理タスクを実行する場合は、 SQL Server Management Objects API ( SMO)を使用することをお勧めします。

Job.Startより正確には、SMO の方法を確認する必要があります。記事内に使い方のサンプルがあります。このクラスは、ジョブの実行が終了したときに通知するJobイベント ( など) を提供します。SuccessAction

于 2013-01-01T23:24:53.960 に答える