У меня есть хранимая процедура, которая возвращает переменное количество нескольких наборов результатов. DataReader.NextResult() выдает ошибку, если следующий набор результатов не существует. Как узнать, существуют ли следующие наборы результатов или нет.
хранимая процедура возвращает несколько наборов результатов, но количество наборов результатов не фиксировано
comment
Какую ошибку вы получаете? В документах говорится, что если наборов результатов больше нет, метод NextResult должен просто возвращать false.
- person Adam Rackis   schedule 15.02.2011
Ответы (2)
Метод NextResult() возвращает true, если наборов результатов больше — проверьте это перед следующим чтением.
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.nextresult.aspx
person
Adam Rackis
schedule
15.02.2011
В dataReader.NextResult() я получаю сообщение об ошибке 'dataReader.NextResult()' вызвало исключение типа 'System.Data.SqlClient.SqlException' bool {System.Data.SqlClient.SqlException}. Эту ошибку я получаю только тогда, когда больше нет наборов результатов.
- person FrankSmith; 15.02.2011
Ошибка, вероятно, где-то в вашем запросе. Опубликуйте новый вопрос со списком кодов и полным сообщением об исключении.
- person Adam Rackis; 15.02.2011
(Я знаю, что это старый пост, но, надеюсь, кому-то он будет полезен!)
Вы можете сделать что-то вроде следующего, если вам нужно обработать неизвестное количество наборов результатов:
// Need to wrap the while loop in a do-while loop due to the way Read() works versus NextResult().
// Read() moves to the next record, if any, starting with the first record.
// NextResult() moves to the next result set, if any, starting with the second result set (i.e., first result set is used automatically).
do
{
while (mySqlDataReader.Read())
{
// Do some processing here...for example:
var rowValues = new object[mySqlDataReader.FieldCount];
mySqlDataReader.GetValues(rowValues);
foreach (var element in rowValues)
{
myStringBuilder.Append(element).Append(" | ");
}
myStringBuilder.AppendLine();
}
}
while (mySqlDataReader.NextResult());
person
VineAndBranches
schedule
01.11.2017