C#執行SQL Server Agent

摘要: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", "");
                }
            }