Laden...

SqlDataReader liefert false

Erstellt von MarC611 vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.446 Views
M
MarC611 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren
SqlDataReader liefert false

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();

731 Beiträge seit 2006
vor 13 Jahren

Hi, du hast die Daten ja schon abgeholt in dem Moment. Da ist nichts mehr zu lesen ^^

MfG
wax

2.223 Beiträge seit 2005
vor 13 Jahren

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

B
198 Beiträge seit 2005
vor 13 Jahren

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.

I
50 Beiträge seit 2010
vor 13 Jahren

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.

F
10.010 Beiträge seit 2004
vor 13 Jahren

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.

M
MarC611 Themenstarter:in
81 Beiträge seit 2009
vor 13 Jahren

Vielen Dank, für eure Hilfe.
Habs jetzt hinbekommen.