繁体   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