System.IndexOutOfRangeException:位置80没有行发送电子邮件时出现错误

时间:2017-12-22 07:22:00

标签: c# sql-server email exception

我正在开发一个简单的警报系统。 SQL表格中的警报(由 INNER JOIN 收集), 用户 将被发送, 电子邮件< / em> 地址和其他一些信息。我想要做的是,阅读表格并将警报消息发送到相关的电子邮件地址。 我用for循环开发了一个应用程序。但是在过程结束时会发生异常。 表中有80行(80是动态的。它可以随时更改)。 对于 循环以索引中的0开头,它会检索表中的第1项并继续,中间没有任何错误。但是,在发送第80个警报(上次警报)后,它会显示异常

  

“System.IndexOutOfRangeException:位置80处没有行”。

我不知道如何解决这个问题。我试过很多方法,但无法解决这个问题。有没有人可以帮我解决这个问题?

   Common ComMsg = new Common();//Common is a name of a class
   DataSet DatMsg = new DataSet();
   private void btnSend_Click(object sender, EventArgs e)
    {
        try
        {
            DatMsg = ComMsg.ReturnDataSet("SELECT RptAlertRecipient.Name,  RptAlertRecipient.Email,  RptAlerts.Factory,  RptAlerts.AlertTime,  RptAlerts.Description " +
                                      "FROM RptAlerts " +
                                      "INNER JOIN RptAlertTypes ON  RptAlerts.AlertTypeID = RptAlertTypes.ID " +
                                      "INNER JOIN RptAlertType_RecipientMapping ON  RptAlertTypes.ID = RptAlertType_RecipientMapping.AlertTypeID " +
                                      "INNER JOIN RptAlertRecipient ON  RptAlertType_RecipientMapping.AlertRecipientID = RptAlertRecipient.ID " +
                                      "ORDER BY RptAlertRecipient.Name ASC");

            for (int i = 0; i < DatMsg.Tables[0].Rows.Count; i++)
            {
                if (DatMsg.Tables[0].Rows.Count > 0)
                {
                    string to = DatMsg.Tables[0].Rows[i].ItemArray.GetValue(1).ToString();
                    string from = "from_mail_address@mydomain.com";
                    string subject = "Alert In Time";
                    string msgBody = "Dear " + DatMsg.Tables[0].Rows[i].ItemArray.GetValue(0).ToString() + "," + "<br/>" + "<br/>" + DatMsg.Tables[0].Rows[i].ItemArray.GetValue(4).ToString() + "<br/>" + "<br/>" + "Regards" + "<br/>" + "Sent by Alert Service";
                    MailMessage msg = new MailMessage(from, to, subject, msgBody);
                    msg.IsBodyHtml = true;
                    SmtpClient clnt = new SmtpClient("mail.smtpserveraddress.local", 25);
                    clnt.EnableSsl = false;
                    clnt.Credentials = new System.Net.NetworkCredential("from_mail_address@mydomain.com", "password");
                    clnt.Send(msg);
                }  
            }
        }
        catch (Exception ex)
        {
            Message.Show("Error: "+ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:-1)

问题在于你的for循环。它应该如下:

for (int i = 0; i < DatMsg.Tables[0].Rows.Count - 1; i++)
{
    ....
}

当索引从0开始时,第80个项目将位于第79位