SqlDataReader возвращает только первый выбор в SqlCommand - PullRequest
4 голосов
/ 16 июля 2009

Я использую SqlCommand для выполнения оператора SQL на базе данных SqlServer2005. (Я также пытался DbCommand .)

Если я выполню этот sql в SQL Server Management Studio, я могу отправить «Результаты в текст». Я хотел бы зафиксировать этот текст в моем коде C #.

Это и это связанные вопросы, но не одно и то же:

My sql содержит, кроме операторов print, также различные операторы select:

PRINT 'We are here'
SELECT Name FROM Table1
-- do some logic
SELECT Name, Country FROM Table1
PRINT 'We are done'

(" Странный sql " Я слышу, как вы говорите. Я знаю, но именно так выглядят наши долгоживущие сценарии обслуживания.)

Я могу использовать SqlConnection.InfoMessage, чтобы перехватывать операторы PRINT отдельно.

Но SqlDataReader, похоже, не поддерживает 2 оператора select, оба с другим FieldCount.

Боюсь, я застрял с Process.Start и командной строкой сервера sql sqlcmd и читал вывод, но я искал что-то большее API'ish .

Заранее спасибо!

Ответы [ 2 ]

9 голосов
/ 16 июля 2009

SqlDataReader должен работать. Используйте метод Read, чтобы просмотреть строки первого выбора, и NextResult, чтобы перейти к результатам второго выбора. Вот так:

do {
    while (dataReader.Read()) {
        //... process one row
    }
} while (dataReader.NextResult()) //go to the results of the next SELECT        
6 голосов
/ 16 июля 2009

Вы должны вызвать .NextResult () в вашем DataReader, чтобы получить второй набор результатов.

...