SqlDataReader liest keine data, obwohl data dort sind

SqlDataReader rdItems; SqlCommand itemsCmd = new SqlCommand(); itemsCmd.CommandText = query; itemsCmd.CommandTimeout = 0; itemsCmd.Connection = sqlCon; sqlCon.Open(); rdItems = itemsCmd.ExecuteReader(); if (rdItems.HasRows) { while (rdItems.Read()) { itemType = rdItems["I1"].ToString(); 

Oben ist mein Code, den ich verwende, um data von einem SqlDataReader zu lesen. Das Problem ist, dass data in rdItems aber wenn rdItems.Read() Zeile ausgeführt wird, verschwinden die Zeilen aus dem Leser. Bitte lassen Sie mich wissen, wo ich falsch gehe.

AFAIK, SqlDataReader kann nur einmal nach ExecuteReader verbraucht werden, bedeutet, dass while Loop durch den Leser iteriert und einfach beendet wird, wenn alle Zeilen fertig zum Lesen sind. Wenn also die loop nach der Überprüfung von HasRows in die nächste Zeile HasRows wird, sind alle vorherigen Zeilen auf dem Leser nicht mehr verfügbar, es sei denn, sie werden in DataTable oder eine list eingefügt.

Durch die Verwendung einer DataTable können Sie die Existenz von DataReader-Inhalten (s) überprüfen und sie iterieren, wenn irgendwelche Zeilen vorhanden sind:

 // assume your query like "SELECT DISTINCT I1 FROM NewItems" // resulting single column with multiple distinct value rows rdItems = itemsCmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(rdItems); // load DataReader contents to a DataTable, resulting an empty DataTable if no row exists // check if datatable is not empty as substitute of SqlDataReader.HasRows property if (dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) { // get row data itemType = row.Field<String>(0); } } 

Anregungen oder Verbesserungen sind willkommen.

reference: DataReader hat Zeilen und data, die versuchen zu lesen, sagt, dass "keine data vorhanden sind"