C# SqlDataReader



  • Zur Anzeige meiner Daten in einer Datenbank wollte ich eine Spalte in einem Listenfeld ausgeben. Leider erhalte ich dabei eine Exception, dass der Index ausserhalb des Arraybereichs war. Hier mal mein Code dazu:

    private void button6_Click(object sender, EventArgs e)
            {   
                using (verbindung = new SqlConnection(conBuilder.ConnectionString))
                using (befehl = new SqlCommand(textBox5.Text, verbindung))
                {
                    try
                    {
                        verbindung.Open();
                        SqlDataReader leser = befehl.ExecuteReader();
    
                        while (leser.Read())
                        {
                            listBox1.Items.Add(leser.GetString(2)); //hier soll die 3. Spalte in die Listbox eingetragen werden
                        }
                        leser.Close();
    
                        MessageBox.Show("Kommando erfolgreich abgeschickt");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Fehler: " + ex.Message, "Datenbankfehler");
                    }
                } 
            }
    

    Wo liegt der Fehler?



  • habs grad rausgefunden wo der Fehler is. Hatte als Befehl geschrieben: "SELECT Name FROM tb_Person"

    Nun hab ich aber die 2. Spalte mit leser.GetString(0) angesprochen, die es natürlich dann gar nicht gibt. Im DataReader ist ja dann nur 1 Spalte, nämlich die der Personen.



  • Wo liegt der Fehler?
    Normally wird bei Exceptions im Debugmodus ein Stacktrace mit Linenumber angezeigt.
    IFIAK Line 13.

    Dann must du checken, ob FieldCount > 2 ist.

    Edit; TooLate



  • Der SqlDataReader kann auch NULL sein.

    Solltest Du auch noch prüfen.



  • Und beim DataReader auch am besten "using(...)" verwenden, damit im Falle einer Exception dieser auch wieder ordentlich 'disposed' wird.


Log in to reply