Laden...

Textbox automatisch füllen mit Eintrag aus einer Datenbank

Letzter Beitrag vor einem Jahr 8 Posts 1.264 Views
Textbox automatisch füllen mit Eintrag aus einer Datenbank

Hallo,
ich bin noch neu hier und hoffe auf Hilfe.

Senario:
Sprache: C#
Datenbank: MySQL

Ich habe ein WinForm Anwendung mit der ich eine Art Stundenkonto für Mitarbeiter führen möchte.
Aktuell hae ich es soweit, das ich eine vorhande Excel Tabelle einlesen kann, Einträge hinzufügen kann.
Ich habe die Mitarbeiter und die Auftraggeber in einer Combobox, die ais der DB gefüllt wird.

Jetzt zu meiner Herausforderung:
Ich möchte das, wenn ich eine Auftraggeber ausgewählt habe, automatisch die hinterlegte Adresse in meine Textbox (txtAdresse) für die Adresse
eingetragen wird. Bekomme das aber irgendwie nicht hin.

Danke euch im Voraus

Jenz

Was hast denn bisher versucht? Was ist Deine Frage? Wo kommst Du nicht weiter?
Siehe [Hinweis] Wie poste ich richtig?


            using (MySqlConnection conn = new MySqlConnection(connString))
            {           
                    conn.Open();
                    // Erstellen eines neuen DataAdapter
                    string client = txbClient.Text;

                    string commmand = "SELECT distinct @constructionSite FROM stundenliste where client = @client";

                    MySqlCommand cmd = new MySqlCommand(commmand);
                    cmd.Connection = conn;
                    MySqlDataAdapter adapter = new MySqlDataAdapter();

                    cmd.Parameters.Add("@constructionSite", MySqlDbType.VarChar);
                    cmd.Parameters["@constructionSite"].Value = adresse;
                    adapter.SelectCommand = cmd;

                    cmd.Parameters.Add("@client", MySqlDbType.VarChar);
                    cmd.Parameters["@client"].Value = client;
                    adapter.SelectCommand = cmd;

                    txbAdresse.Text = cmd.ExecuteNonQuery().toString();
                   
                    // Schließt die DB Verbindung
                    conn.Close();                   
            }

Das ist jetzt der aktuelle Stand.
Wie gesagt Einträg in die DB bekomme ich. Jedoch bekomme ich anscheinend nicht das raus was ich mir erhoffe.
Ich versuche es nochmal genauer zu erklären:
Ich habe eine WinForm.
Diese hat mehrere ComboBoxen und mehrere Textboxen sowie eine DateTimePicker.
Ich habe eine Textbox "Adresse" hier zu gibt es auch die passende Splaten in der Datenbank-Tabelle.
Ich hätte jetzt gerne, wenn ihc das Porgramm ausführe und die Textfelder befülle und aus der Combobox(cmbClient) einen Eintrag auswähle, das dieses SelectedItem genutzt wir um eine weitere DB Abfrage durchzuführen ( SELECT adresse FROM Tabellenname where client = cmbClient.SelectedItem (Ich weiß Syntax funktioniert so nicht ist jetzt nur zur Verdeutlichung) ).
Dies soll aber jedesmal geschehen, wenn ich einen Eintrag aus der Combobox auswähle.

Und für die Parameter verwendet man, wenn möglich, besser AddWithValue.
Siehe MySQL Docs: MySQL .NET - 6.1.4 Working with Parameters

Schau dir mal im Debugger an, was cmd.ExecuteNonQuery() zurückgibt. Vermutlich nicht dass, was du erwartest: https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executenonquery?view=dotnet-plat-ext-7.0

P.S.: Der Code kompiliert nicht.. toString() ist kein valides C#.

So, nachdem ich alles noch mal überdacht hatte, bin ich entlich erfolgreich gewesen

hier meine Lösung:


            string connString = $"server=server;user id=user ; password=password; database=database;SslMode=Preferred";

            using (MySqlConnection conn = new MySqlConnection(connString))
            {

                string newclient = cmbClient.Text;

                conn.Open();
                string commmand = "SELECT distinct constructionSite, client FROM stundenliste where client = '" + newclient + "'";
                MySqlCommand cmd = new MySqlCommand(commmand);
                cmd.Connection = conn;

                MySqlCommand command = new MySqlCommand(commmand, conn);

                // Parameter für die Abfrage setzen
                command.Parameters.AddWithValue("@client", newclient);

                // Abfrage ausführen
                MySqlDataReader reader = command.ExecuteReader();

                // Ergebnisse verarbeiten
                if (reader.Read())
                {
                    // Daten auslesen
                    string constructionSite = reader.GetString("constructionSite");

                    // Ausgabe der Daten
                    txbAdresse.Text = constructionSite;
                }

                // Reader schließen
                reader.Close();

                conn.Close();

            }

Jetzt verwendest du aber den SQL-Parameter nicht mehr, sondern dein Code ist nun anfällig für SQL-Injection!

Und warum verwendest du jetzt zwei verschiedene MySqlCommand-Objekte?
Außerdem benötigst du durch konsequente Verwendung der using-Anweisungen auch keinen expliziten Close()-Aufruf mehr.