2009-07-16 10 views
4

Ich verwende eine , um eine SQL-Anweisung auf einer SqlServer2005-Datenbank auszuführen. (Ich probierte auch DbCommand.)SqlDataReader gibt nur die erste Auswahl in SqlCommand zurück

Wenn ich diese SQL in SQL Server Management Studio ausführe, kann ich die "Ergebnisse zu Text" senden. Ich möchte diesen Text in meinem C# -Code erfassen.

This und this sind Fragen, aber nicht das gleiche:

My SQL enthält Aussagen neben drucken, auch verschiedene SELECT-Anweisungen:

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

("Seltsame SQL" Ich höre Sie sagen, ich weiß, aber das ist, was unsere langlebigen Wartung Skripts aussehen.)

Ich kann die SqlConnection.InfoMessage verwenden, um die PRINT-Anweisungen s abzufangen unabhängig.

Aber SqlDataReader scheint nicht die 2 Select-Anweisungen zu unterstützen, beide mit einem anderen FieldCount.

Ich fürchte, ich bin mit Process.Start und der SQL Server-Befehlszeile sqlcmd und Lesen der Ausgabe fest, aber ich suchte nach etwas mehr API'ish.

Vielen Dank im Voraus!

Antwort

8

SqlDataReader sollte funktionieren. Verwenden Sie die Methode Read, um durch die Zeilen der ersten Auswahl zu gehen, und NextResult, um zu den Ergebnissen der zweiten Auswahl zu gelangen. So ähnlich:

do { 
    while (dataReader.Read()) { 
     //... process one row 
    } 
} while (dataReader.NextResult()) //go to the results of the next SELECT   
6

Sie müssen .NextResult() auf Ihrem DataReader aufrufen, um den zweiten Satz von Ergebnissen zu erhalten.

Verwandte Themen