摘要:C#執行SQL Server Agent
要對資料庫進行例行性的資料操作,例如定期update某個資料表,一般的作法是在SSMS裡的SQL Server Agent撰寫一隻job,如下。
一般來說,如果job執行失敗,都會透過DBA直接進資料庫去手動執行該job,如今遇到一個需求,使用者要求要有一個介面,好讓他按一個按鈕就可以執行好他要的job。
幾經思考後,因為不允許其他人有權限access資料庫,因此設計一個介面讓使用者可以透過網頁,按一顆按鈕就可執行該job。
SQL Server裡有一隻StoreProcedure叫sp_start_job,是負責執行SQL Server Agent下的job。因此,利用C#來呼叫這隻StoreProcedure就能完成本次需求。
程式碼:
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("[msdb].[dbo].[sp_start_job]", cn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@job_name", SqlDbType.NVarChar, 128).Value = "air2"; // 指定 SQL Server Agent job名稱
// 接收回傳值
SqlParameter rc = new SqlParameter("rc", SqlDbType.Int);
rc.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(rc);
cn.Open();
cmd.ExecuteNonQuery();
Thread.Sleep(40000);
if ((int)rc.Value == 0) //rc回傳值,0表示成功、1表示失敗
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "");
else
Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "");
}
}