Я думаю, проблема в том, что вы вызываете DataReader после того, как он прочитал последнюю запись. Reader.Read () вернул false, что означает, что reader[1]
должно выдать ошибку, поскольку читать нечего.
Я не знаю, хотели ли вы каждое значение в теле письма или только последнее ... при условии, что вы хотите каждое, должно работать что-то вроде этого:
using (OleDbConnection connection = new OleDbConnection(cs))
{
connection.Open();
using (OleDbCommand cmd = new OleDbCommand(queryString, connection))
{
using (OleDbDataReader reader = cmd.ExecuteReader())
{
StringBuilder body = new StringBuilder();
while (reader.Read())
{
string to = reader.GetString(0);
message.To.Add(to);
body.AppendFormat("The Employee id is 5 {0}<br>", to);
}
message.Body = body.ToString();
reader.Close();
}
}
}
smtp.Send(message);
Если вам действительно нужен только последний (как предполагает ваш исходный код), я бы просто сохранил его в локальной строке внутри цикла, а затем добавил его после цикла чтения.
В несвязанном вопросе вы дважды создаете экземпляр объекта OLE Command. Я удалил дубликат в фрагменте кода выше.