Wczytanie wyników zapytania do TextBox

0

Cześć wszystkim.

Próbuję wczytać wielokrotny wynik zapytania SELECT do TextBox, jednak zawsze wyświetla mi jedynie jeden wynik. Dlaczego? TextBox ma ustawioną wartość TextMode na Multiline.


                using (OleDbCommand cmd = new OleDbCommand("SELECT Czas_akcji, Nazwa_uzytkownika, Rodzaj_wartosci, Nowa_wartosc FROM historia_akcji"))
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    con.Open();
                    using (OleDbDataReader sdr = cmd.ExecuteReader())
                    {
                        sdr.Read();
                        TextBox1.Text = sdr["Czas_akcji"].ToString() + " " + sdr["Nazwa_uzytkownika"].ToString() + " " + sdr["Rodzaj_wartosci"].ToString() + " " + sdr["Nowa_wartosc"].ToString();
                    }
                    con.Close();
                }

1

@Neosphoros: Popraw mnie jeśli źle rozumiem. Zapytanie SELECT zwraca ci kilka rekordów i chcesz by w TextBox pojawiły się wszystkie? Jeśli tak, to musisz sobie stworzyć jakiś StringBuilder i iterując po wynikach z sdr dodawać do niego wartości i dopiero po pętli przypisać wartość do TextBox :)

1
using (OleDbDataReader sdr = cmd.ExecuteReader())
                    {
                       while( sdr.Read())
                        TextBox1.Text += sdr["Czas_akcji"].ToString() + " " + sdr["Nazwa_uzytkownika"].ToString() + " " + sdr["Rodzaj_wartosci"].ToString() + " " + sdr["Nowa_wartosc"].ToString();
                    }
0
jacek.placek napisał(a):
> using (OleDbDataReader sdr = cmd.ExecuteReader())
>                     {
>                        while( sdr.Read())
>                         TextBox1.Text += sdr["Czas_akcji"].ToString() + " " + sdr["Nazwa_uzytkownika"].ToString() + " " + sdr["Rodzaj_wartosci"].ToString() + " " + sdr["Nowa_wartosc"].ToString();
>                     }
> ```

Jesteś mistrzem!
Cały Internet zwraca uwagę na konieczność użycia stringbuilder'a, a tu proszę... dużo prościej.
2

Stringbuildera warto uzyć w takim przypadku (gdzie wielokrotnie kleisz stringi), wplywa to pozytywnie na wydajność.

0

Ech...
Bo problem nie miał nic wspólnego ze zlepianiem stringa.
Jak używasz jakiejś funkcji (tu Read()) to przeczytaj co ona robi.
https://docs.microsoft.com/pl-pl/dotnet/api/system.data.oledb.oledbdatareader.read?view=dotnet-plat-ext-6.0

2

Nie. Mi generalnie chodzi o sklejanie stringów. Obojętnie czy znanych czy nie i skąd pochodzą (DB, pliki, XML, JSON...).
StringBuilder nie ma nic wspólnego z odczytem danych z bazy ale jeśli chcesz posklejać większość ilość tekstu to StringBuilder będzie bardziej wydajny niż samo dodawanie, jak już @kzkzg wspomniał.
U Ciebie brakowało przechodzenia po rekordach z DB. Read() powoduje jedno przejście do następnego rekordu. dlatego trzeba użyć pętli while, żeby przejść po wszystkich rekordach.
To czy w pętli while sklejasz dane z rekordu do stringa czy tworzysz jakieś obiekty i dodajesz je do jakiejś listy to inna sprawa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1