Hallo zusammen,
ich habe ein Problem mit dem SqlDataReader.
Und zwar liefert der bei Read() immer false zurück.
Kann man das irgendwie setzen oder so?
Hier mein Code:
//Anzahl Zeilen auslesen
while (myReader.Read())
{
Zeile++;
}
//Anzahl Spalten auslesen
Spalte = myReader.FieldCount;
Zeile = 3 + 1;
Zeile = Zeile + 1;
dataArray = new string[Spalte, Zeile];
for (int i = 0; i < myReader.FieldCount; i++)
{
dataArray[i, 0] = myReader.GetName(i);
}
Zeile = 0;
//HIER BEKOMME ICH FALSE, WILL ABER TRUE UM MEINE DATEN AUSZULESEN
//SCHLEIFE WIRD ALSO ÜBERSPRUNGEN
while (myReader.Read())
{
for (int i = 0; i < Spalte; i++)
{
dataArray[i, Zeile + 1] = myReader.GetValue(i).ToString();
}
Zeile++;
}
// Lesen beenden
myReader.Close();
Hi, du hast die Daten ja schon abgeholt in dem Moment. Da ist nichts mehr zu lesen ^^
MfG
wax
Hallo MarC611,
uhhh das ist sehr Umständlich, das Problem an deinem Code ist dieser Code abschnitt
while (myReader.Read())
{
Zeile++;
}
mit diesem Code setzt du deinen Zeiger auf den letzten Datensatz, und aus diesem Grund gibt Read() in der unteren Schleife false zurück, denn nach der letzten zeile gibt es keine mehr.
Warum benutzt Du keine DateTable / DataSet ?
Viele Grüße
Lars
Hallo,
Liefert dein DataReader überhaupt in der ersten Schleife Ergebnisse zurück?
Warum verarbeitest du denn deine Daten nicht auch gleich im ersten Schleifendruchlauf? So ist das ein bisschen seltsamer Code den du da gepostet hast.
Beim zweiten Durchlauf bekommst du mit deinem Reader immer false, weil du bereits ans Ende der Datensätze gelaufen bist. Das ist auch der Grund warum du alles in einer Schleife machen solltest.
warum speicherst du die Daten nicht einfach gleich schön sauber in einem Dataset?
SqlConnection con = new SqlConnection(conString);
SqlCommand cmd = new SqlCommand(sSQL_Select, con);
DataSet ds = new DataSet();
try
{
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sSQL_Select, con);
adapter.Fill(ds);
con.Close();
}
catch (Exception)
{
con.Close();
}
Du hast die Daten schön sauber wie in deiner Datenbank in einer Tabelle und kannst sie verarbeiten mit
ds.Tables[0].Rows[index des Datensatzes][Name der Spalte].
Und ja das false kommt dadurch das du schon in der ersten Schleife die Sachen ausliest.
Wer hat eigentlich mal diesen Umständlichen Weg über Connection, Commadn zum Adapter in die Welt gesetzt?
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(sSQL_Select, conString);
adapter.Fill(ds);
Macht genau das gleiche.