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

问题描述 投票:0回答:1

我正在开发一个简单的警报系统。 SQL表中的警报(由INNER JOIN收集)与要发送的用户,电子邮件地址和一些其他信息。我想要做的是,阅读表格并将警报消息发送到相关的电子邮件地址。我用for循环开发了一个应用程序。但是在过程结束时会发生异常。表中有80行(80是动态的。它可以随时更改)。 For循环以索引中的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 = "[email protected]";
                    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("[email protected]", "password");
                    clnt.Send(msg);
                }  
            }
        }
        catch (Exception ex)
        {
            Message.Show("Error: "+ex.Message);
        }
    }
c# sql-server email exception
1个回答
-1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.