хранимая процедура возвращает несколько наборов результатов, но количество наборов результатов не фиксировано

У меня есть хранимая процедура, которая возвращает переменное количество нескольких наборов результатов. DataReader.NextResult() выдает ошибку, если следующий набор результатов не существует. Как узнать, существуют ли следующие наборы результатов или нет.


person FrankSmith    schedule 15.02.2011    source источник
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
comment
В dataReader.NextResult() я получаю сообщение об ошибке 'dataReader.NextResult()' вызвало исключение типа 'System.Data.SqlClient.SqlException' bool {System.Data.SqlClient.SqlException}. Эту ошибку я получаю только тогда, когда больше нет наборов результатов. - person FrankSmith; 15.02.2011
comment
Ошибка, вероятно, где-то в вашем запросе. Опубликуйте новый вопрос со списком кодов и полным сообщением об исключении. - 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