Autor Beitrag
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Mo 22.08.11 19:11 
Hallo @ C#Sharp Forum User's!

Habe folgendes Problem und zwar möchte ich das Abfrage-Ergebnis aus einer Access Datenbank in einzele
Textboxen ausgeben! Zur einschränkung bzw. zum bilden des select command's werden auch 2 ComboBox Steuer-
Elemente eingebunden!

Nun leider will mir das ganze nicht recht gelingen und hoffe das mir jemand von euch einen Anhaltspunkt geben kann!

Hier mal der bisherige Code der auch wunderbar funktioniert nur halt leider das ERgebnis in einer listBox ausgibt!

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public Winterreifen()
        {
            InitializeComponent();
            comboMarke.Items.Add("Dunlop");
            comboMarke.Items.Add("Semperit");
            comboMarke.Items.Add("Continental");
            comboMarke.Items.Add("Michelin");
            comboMarke.Items.Add("Kumho");
            comboMarke.Items.Add("Kleber");
            comboMarke.Items.Add("Bridgestone");
            comboMarke.Items.Add("Firestone");
            comboMarke.Items.Add("Good Year");
            comboMarke.Items.Add("Fulda");
            comboMarke.Items.Add("Pirelli");

            comboDimension.Items.Add("195/ 65 R15");
            comboDimension.Items.Add("205/ 55 R16");
            button1.Enabled = true;
        }


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
private void button1_Click(object sender, EventArgs e)
        {
            con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Family\Documents\Winterreifen.accdb;Persist Security Info=False;";
            cmd.Connection = con;
            cmd.CommandText = "select * from ReifenDetail where HerstellerID like '" + comboMarke.Text + "' and Dimension like '" + comboDimension.Text + "'";
            try
            {
                con.Open();

                reader = cmd.ExecuteReader();
                listBox1.Items.Clear();

                while (reader.Read())
                {
                    listBox1.Items.Add(
                        reader["HerstellerID"] + "\t" + 
                        reader["Profilname"] + "\t" + 
                        reader["Dimension"] + "\t" +
                        reader["Tragkraft"] + "\t" +
                        reader["Geschwindigkeitsindex"] + "\t" +
                        reader["Aktionspreis"] + "\t" +
                        reader["FA1Preis"] + "\n");                       
                }

                reader.Close();
                con.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);

            }
            finally
            {
                con.Close();
            }
        }


Jedes Abfrage Ergebnis beinhaltet immer 3 Datensätze zu je 7 Felder somit würde ich 21 TextBoxen benötigen!!

Folgendes hab ich schon probiert liefert mir leider nur immer einen Datensatz!

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
private void button2_Click(object sender, EventArgs e)
        {
            con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Family\Documents\Winterreifen.accdb;Persist Security Info=False;";
            cmd.Connection = con;
            cmd.CommandText = "select * from ReifenDetail where HerstellerID like '" + comboMarke.Text + "' and Dimension like '" + comboDimension.Text + "'";
            
            try
            {
                con.Open();

                reader = cmd.ExecuteReader();
                listBox1.Items.Clear();

                while (reader.Read())
                {

                    textBox1.Text = "" + reader["HerstellerID"];
                    textBox2.Text = "" + reader["Profilname"];
                    textBox3.Text = "" + reader["Dimension"];
                    textBox4.Text = "" + reader["Tragkraft"];
                    textBox5.Text = "" + reader["Geschwindigkeitsindex"];
                    textBox6.Text = "" + reader["Aktionspreis"];
                    textBox7.Text = "" + reader["FA1Preis"];
                    textBox8.Text = "" + reader["HerstellerID"];
                    textBox9.Text = "" + reader["Profilname"];
                    textBox10.Text = "" + reader["Dimension"];
                    textBox11.Text = "" + reader["Tragkraft"];
                    textBox12.Text = "" + reader["Geschwindigkeitsindex"];
                    textBox13.Text = "" + reader["Aktionspreis"];
                    textBox14.Text = "" + reader["FA1Preis"];
                    textBox15.Text = "" + reader["HerstellerID"];
                    textBox16.Text = "" + reader["Profilname"];
                    textBox17.Text = "" + reader["Dimension"];
                    textBox18.Text = "" + reader["Tragkraft"];
                    textBox19.Text = "" + reader["Geschwindigkeitsindex"];
                    textBox20.Text = "" + reader["Aktionspreis"];
                    textBox21.Text = "" + reader["FA1Preis"];

                    
                }

                reader.Close();
                con.Close();
               
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);

            }
            finally
            {
                con.Close();
            }

        }


Wäre echt nett wenn sich jemand meinem Problem annehmen würde!

Vielen Dank schonmal im vorraus dafür!

MfG

Yankyy02
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 23.08.11 07:17 
Guten Morgen!

erstmal: parametrisiere mal lieber dein Sql-Statement, da es so erstens schöner zu lesen ist und zweitens auch sicher (Sql-Injection sagt Dir was?).
user profile iconYankyy02 hat folgendes geschrieben Zum zitierten Posting springen:
Jedes Abfrage Ergebnis beinhaltet immer 3 Datensätze zu je 7 Felder somit würde ich 21 TextBoxen benötigen!!

Das mit den 3 Datensätzen sehe ich nicht so. Wenn es im Moment so ist, okay, aber ansonsten kann ja durchaus auch mehr gefunden werden. Was, wenn Du 10 Reifenarten von Dunlop mit der Größe 195/ 65 R15 in der Datenbank hast?
Und hier mal die Frage: warum liest Du denn die Reifenhersteller und die Größen nicht einfach aus der Datenbank aus, sondern fügst sie händisch zu den ComboBoxen hinzu?

Dein unterer Quelltext: Klar, dass in allen TextBoxen nur jeweils der gleiche Wert drin steht. Und zwar der letzte Datensatz, der in der Datenbank gefunden wird. Wie sollte es auch anders sein?

Erstelle Dir doch einfach eine Klasse, die die ganzen Eigenschaften besitzt, die Du benötigst bzw. aus der Datenbank liest (was sowieso sauberer wäre) und sammel dann die Ergebnisse in einer List<T>. In der Oberfläche würde ich dann wahrscheinlich eine Möglichkeit anbieten, die Ergebnisse einzeln durchzugehen. Denn alles auf einmal anzuseigen ist nicht gut.

Und noch eine Anmerkung: Wenn ich mir das Statement so ansehe, so ist Deine Datenbank kein bisschen normalisiert.
Aber das soll nicht das Thema sein.
LG,

Für diesen Beitrag haben gedankt: Yankyy02
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 23.08.11 10:16 
Hallo Yankyy02,

wenn du wirklich eine Liste von der Datenbank zurückerhältst (d.h. mehrere Datensätze), dann solltest du entsprechende Steuerelemente (z.b. DataGridView) zur Anzeige verwenden (anstatt vordefinierte TextBoxen).
Und dann benutze "DataBinding" um die Daten an die Controls zu binden (Stichworte: DataSource-Eigenschaft, DataTable, DataAdapter etc.) - suche einfach mal hier im Forum oder im Internet nach diesen Begriffen, um dich zu informieren.
Hilfreich ist auch das OpenBook Visual C#, in denen die Grundlagen erklärt werden.

Und bzgl. SQL-Parameter s. Parameter von SQL Befehlen

Für diesen Beitrag haben gedankt: Yankyy02
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Di 23.08.11 14:59 
Servus und danke schonmal für eure Antworten bzw. Lösungsvorschläge!

Bin echt froh das sich jemand bei diesem herlichen Wetter die Zeit nimmt
um sich meinem Problem anzunehmen! Da Ihr beide mir schon bei meinem
pictureBox Problem geholfen habt bin ich überzeugt daß eure Lösungsvorschläge
auch hier funktionieren!!

Werde eure Ansätze heute am Abend mal probieren!

@ TH69 Hab dieses Buch zuhause nur leider verwendet der Autor bei seinen
Beispielen nur Konsolen Applikationen die für mich schwer nach zu vollziehen
sind bzw. schwer in mein WinForm einzubauen sind!

Grundsätzlich würde ich gerne wissen wie Ihr auf das mit der List<T> kommt
das ich die Datensätze in so einer Liste speichern kann und dann per Index
ansprechen kann daß wird doch nirgends beschrieben! Dies sind genau die Dinge
die einen dann verzweifeln lassen!! Wo nehmt ihr die Infos her?? Oder blick
ICH einfach nicht durch!?

Aber wie gesagt ..... Danke nochmal für eure Anteilnahme!!

MfG

Yankyy02
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Do 25.08.11 10:55 
Hallo Yankyy02
Zitat:

Grundsätzlich würde ich gerne wissen wie Ihr auf das mit der List<T> kommt
das ich die Datensätze in so einer Liste speichern kann und dann per Index
ansprechen kann daß wird doch nirgends beschrieben! Dies sind genau die Dinge
die einen dann verzweifeln lassen!! Wo nehmt ihr die Infos her?? Oder blick
ICH einfach nicht durch!?



das ist doch das schöne am programmieren, man liest etwas über die Klasse List<T> in der MSDN oder einem Buch, dann macht man sich Gedanke für was man diese Klasse einsetzen kann und probiert es aus.
Ich als als Hobbist, welcher nicht unter Zeitdruck arbeiten muss, mache diese Detektivarbeit am liebsten, sobald es nur noch ans Codeschreiben geht wirds für mich langweilig. Ich habe sogar eine Zeitlang nur mit einem Texteditor und csc.exe gearbeitet um das Framework besser kennen zu lernen. Ist schon etwas anderes wenn einem keine Liste mit allen Methoden und Funktionen angezeigt werde. Ausserdem lernt man auch, dass es das Visual Studio gar nicht braucht um mit .Net zu programmieren.
Das schöne ist auch, es gibt im Netz für jedes Problem ein Beispiel oder eine Lösung.

Die Konsole ist auch nur Art deine Daten anuzeigen. Die Bearbeitung der Daten selber funktioniert genau gleich.
Wenn GUI und Daten korrekt getrennt sind, ist es egal wo die Daten angezeigt werden.

Gruss Lothi
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Fr 26.08.11 18:26 
Nun ja nachdem ich noch immer nicht weitergekommen bin und ich das wirklich lernen möchte hab
ich mir kurzer Hand das Buch "Datenbank-Programmierung mit Visual C# 2010" gekauft!

Ich hoffe nun daß ich nach dem durcharbeiten dieses Buches die Objekte "DataSet" , "DataTable"
und Co richtig verstehe und einsetzem kann!!

Somit sehe ich zuerstmal meine Frage beantwortet und bedanke mich nochmal für eure Antworten!

MfG

Yankyy02