【发布时间】:2017-12-23 22:15:45
【问题描述】:
我正在开发一个简单的警报系统。 SQL 表中有警报(由 INNER JOIN 收集)与要发送的 用户,电子邮件 地址和其他一些信息。我想要做的是,阅读表格并将警报消息发送到相关的电子邮件地址。 我为此开发了一个应用程序,带有一个 for 循环。但是在过程结束时会发生异常。 表中有 80 行(80 行是动态的。它可以随时更改)。 For 循环从索引中的 0 开始,它检索表中的第一项并继续执行,中间没有任何错误。但是,在发送第 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);
}
}
【问题讨论】:
-
您使用的任何列都可以为空吗?
-
没有。所有的列都填充了一些信息。
-
哪一行抛出行索引超出范围错误?
for循环似乎是正确的,但循环内部的某个地方出错了。
标签: c# sql-server email exception