Я пытаюсь выбрать список пользователей из базы данных и отправлять электронную почту каждому из пользователей на основе условия isSent == false. После отправки им электронной почты значение этого значения false должно быть обновлено до значения true. Ниже приведен код, из которого я получаю список пользователей из базы данных и метод вызова sendEmail() для каждого из них.Концепция обработки SqlCommand в C#
myConnection.Open();
//*******
try
{
SqlDataReader myReader = null;
string sql = "SELECT * FROM testTable where isSent = false";
SqlCommand myCommand = new SqlCommand(sql, myConnection);
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
sendEmail(myReader["emailAdd"].ToString(),
myReader["UserID"].ToString());
}
Вторая часть:
public static void sendEmail(string emailAdd,string userID){
.
.
.
try
{
smtpClient.Send(mail);
try
{
string sql = "UPDATE testTable SET isSent = 1 WHERE UserID = " + userID;
SqlCommand myCommand = new SqlCommand(sql, myConnection);
int rows = myCommand.ExecuteNonQuery();
.
.
.
}
}
}
Проблема я столкнулся в том, что, так как от основного метода я уже SqlDataReader будучи держать читать, и поэтому я не могу выполнить обновление сейчас. Любая работа для меня? Сообщение об ошибке, что я получаю, как показано ниже:
There is already an open DataReader associated with this Command which must be closed first.
Я извиняюсь, если я не правильно понимаю, как это до сих пор жалуются на то же error..I я использую фрагмент кода в моей основной метод и другой набор его в методе sendMail(), он должен работать правильно? –
@ IsaacLem: Вы не сказали нам, о какой ошибке вы говорите, что очень сложно сказать, что случилось. Но да, если вы создаете отдельное соединение в каждом фрагменте кода, с этой точки зрения должно быть хорошо. Может возникнуть проблема с точки зрения транзакционных транзакций (чтение из запроса при обновлении данных, с которыми оно работает), но это другое дело. –
Я редактировал свой вопрос, который содержит сообщение об ошибке. Оба способа дают мне то же сообщение об ошибке. Представьте, что первый запрос возвращает мне 3 строки A, B и C. Теперь я пытаюсь обновить один из столбцов строки A. Будут ли какие-либо проблемы с ним? –