2017-10-04 128 views
1

這裏是問題的簡要說明:報告工作的工作不同,我的本地機器

我有寫在C#HTML/CSSTSQL語言的腳本,該腳本應該分發生成的報告對我們每個團隊成員來說,當我在本地計算機上測試時,每個人都可以獲得電子郵件,但是如果我將其作爲我們服務器上的工作計劃,我們只有少數人能夠獲得(我們有一張表用於記錄發送的電子郵件,並且日誌記錄步驟也是腳本中的TSQL存儲過程),我已檢查過表格,並且沒有關於缺少接收者的此類數據記錄,僅限於那些獲得電子郵件的人員,這意味着存儲過程無法工作對於那些沒有收到郵件的會員,以及b elow是登錄表格併發送電子郵件的代碼

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; 

      } 
     } 

任何建議將不勝感激。

+0

爲什麼不使用SSRS訂閱,而不是使用SSIS來發送報告? –

回答

0

代碼中的問題部分是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可能與您的本地計算機到服務器的版本不同,因爲收件人變量的大小可能不同,並且會截斷列表。

相關問題