SqlDataReader не имеет третьего набора записей - PullRequest
2 голосов
/ 18 декабря 2009

У меня есть хранимая процедура, которая возвращает три набора записей. Вот это называется в Студии.

EXEC CampaignData '007CF7F8-AE8D-DE11-8BBA-0003FF4C13C9'  

Я не могу вырезать и вставить наборы записей из Management Studio, но, поверьте мне, он показывает три набора записей, первый имеет одну строку с 2 значениями, второй имеет три строки и третий имеет 2 строки.

Вот мой c # читает его

using (DAResult daResult = DA.SP.CampaignData(new Guid("007CF7F8-AE8D-DE11-8BBA-0003FF4C13C9")).Execute())
{
daResult.Read();
UserCount = daResult.ValueInt("UserCount");
ProspectCount = daResult.ValueInt("ProspectCount");

daResult.Next();
EmailTemplates = new DataTable();
EmailTemplates.Load(daResult.Reader);

daResult.Next();
SMSTemplates = new DataTable();
SMSTemplates.Load(daResult.Reader);
}

Next () просто вызывает NextResult для Reader. Когда я добираюсь до последней строки, у читателя нет строк. Как и в случае последнего набора записей, строк не было. Все же это делает. Все остальные значения возвращаются в порядке.

У кого-нибудь есть идеи, почему это может быть?

1 Ответ

2 голосов
/ 18 декабря 2009

"EmailTemplates Load (daResult.Reader);"
Метод Load использует первый набор результатов из загруженного IDataReader и после успешного завершения устанавливает позицию считывателя в следующий набор результатов, если таковой имеется.
Поэтому вы должны удалить только строку кода: "daResult.Next ();"

...