我正在开发一个简单的警报系统。 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);
}
}
答案 0 :(得分:-1)
问题在于你的for循环。它应该如下:
for (int i = 0; i < DatMsg.Tables[0].Rows.Count - 1; i++)
{
....
}
当索引从0开始时,第80个项目将位于第79位