簡體   English   中英

報告服務器上的計划作業與我的本地計算機不同

[英]Reports job scheulded on server works different from my local machine

這是該問題的簡要說明:

我有一個用C#HTML/CSSTSQL語言編寫的腳本,該腳本應該將生成的報告分發給我們的每個團隊成員,當我在本地計算機上進行測試時,每個人都可以收到電子郵件,但是如果我計划了作為服務器上的一項工作,我們中只有少數人可以得到(我們有一個用於記錄已發送電子郵件的表,並且記錄步驟也是腳本中的TSQL存儲過程),我已經檢查了該表,沒有丟失收件人的此類數據記錄,僅適用於收到電子郵件的人員,這意味着存儲過程不適用於未收到電子郵件的成員,以下是用於登錄到表並發送電子郵件的代碼

public void Main()
{
   ...code above

   try
      {

        ...code above

               if (SendMail(sSubject, sBody))
                    {
                       Dts.TaskResult = (int)ScriptResults.Success;
                    }
               else
                    {
                        Dts.TaskResult = (int)ScriptResults.Failure;
                    }
        Dts.TaskResult = (int)ScriptResults.Success;
       }

   catch (Exception e)
      {
        //error handling                
      }

}

public bool SendMail(string sSubject, string sMessage)
{
   try
       {
         string sEmailSendTo  = Dts.Variable["ProjRespEmail"].Value.ToString();

        string sEmailSendFrom = Dts.Variables["SqlEmail"].Value.ToString();

        if (Dts.Variables["StrClientName"].Value.ToString() != "")
           {
            using (SqlConnection sqlCon = new SqlConnection("connection name"))
              {
               sqlCon.Open();
               using (SqlCommand sqlCmd = sqlCon.CreateCommand())
                  {
                            sqlCmd.CommandText = "name";
                            sqlCmd.CommandType = CommandType.StoredProcedure;
                            sqlCmd.Parameters.Add(new SqlParameter("SendingMachine", Environment.MachineName));
                            sqlCmd.Parameters.Add(new SqlParameter("Recipients", sEmailSendTo));
                            sqlCmd.Parameters.Add(new SqlParameter("Subject", sSubject));
                            sqlCmd.Parameters.Add(new SqlParameter("Body", sMessage));
                           sqlCmd.ExecuteNonQuery();
                        }
                    }
                }

                Dts.Variables["ProjRespEmail"].Value = "";
                Dts.Variables["StrProjResponsible"].Value = "";//SqlEmail
                Dts.Variables["SqlEmail"].Value = "";
                Dts.Variables["StrClientName"].Value = "";
                return true;
            }
            catch (Exception ex)
            {
               //error handling
               return false;

            }
        }

任何建議將不勝感激。

您的代碼中的部分問題是,最后總是將TaskResult設置為Success。 刪除下面指出的行:

   try
  {

    ...code above

           if (SendMail(sSubject, sBody))
                {
                   Dts.TaskResult = (int)ScriptResults.Success;
                }
           else
                {
                    Dts.TaskResult = (int)ScriptResults.Failure;
                }
          //Remove this, because it overwrites the actions from above
          //Dts.TaskResult = (int)ScriptResults.Success;
   }

  catch (Exception e)
  {
        //error handling                
  }

這至少將使任務失敗,因此您可以捕獲任何錯誤。 根據您的描述,聽起來proc可能與本地計算機和服務器版本不同,因為Recipients變量的大小可能不同,並且會截斷列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM