Laden...

Einsetzten von Werten im Grid in eine TextBox

Erstellt von Asonger vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.267 Views
A
Asonger Themenstarter:in
10 Beiträge seit 2014
vor 7 Jahren
Einsetzten von Werten im Grid in eine TextBox

verwendetes Datenbanksystem: Visual Studio 2012, SQLite, Windows-Forms

Moin, moin,
folgendes Porblem, ich würde gerne von meiner Datenbank eine "Such-Operation" starten, nur habe ich keine Ahnung wie ich von der Datenbank aus, einzelne Zeilen in die jeweiligen TextBoxen Kopieren kann, sodass ich diese auch bearbeiten kann, habe dafür auch einen tollen Quellcode :

private void Suche()
        {
            string suchwort = txtB_Vorname.Text;
            con.Open();
            SQLiteCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT * FROM Member WHERE Vorname";
            cmd.ExecuteNonQuery();
            con.Close();
            

            if (suchwort != cmd.CommandText)
            {
                cmd.CommandText = "SELECT ID, FROM Member";
                txtB_ID.Clear();
                txtB_ID.Text = txtB_ID.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Vorname, FROM Member";
                txtB_Vorname.Clear();
                txtB_Vorname.Text = txtB_Vorname.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Nachname, FROM Member";
                txtB_Nachname.Clear();
                txtB_Nachname.Text = txtB_Nachname.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Geburtsdatum, FORM Member";
                txtB_Geburtsdatum.Clear();
                txtB_Geburtsdatum.Text = txtB_Geburtsdatum.Text + cmd.CommandText;

                //Soll vergleichen ob das Suchwort in der Datenbank vorhanden ist, 
                //falls ja, soll diese Zeile in Textbox Nachname, Vorname, ID und Geburtsdatum eingetragen werden 
                //und zum bearbeiten zur verfügung stehen.
            }
        }

Ziel sollte es sein, dass ich von der Datenbank, eine Komplette Zeile in meine Text Boxen ID, Vorname, Nachname & Geburtsdatum einfügen kann, damit ich diese dann bearbeiten kann.

Ich bedanke mich für alle Antworten und Tipps. 😃

Grüße, Asonger

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo Asonger,

Hm...ich weiss nicht ob ich dich richtig verstehe. Ich denke aber es geht in Richtung eines einfachen Selects mit WHERE-Klausel.

Du solltest dich nochmal mit TSQL auseinandersetzen. Ausserdem gibt die ExecuteNonQuery nur die Anzahl der betroffenen Zeilen zurück, du willst aber die Zeilen direkt. Also

SELECT * FROM Member WHERE Vorname LIKE irgendwas";

. Du musst ja auf irgendwas vergleichen.

Das Ergebnis kannst du dann anzeigen.

Auch ein Blick wert: [Artikelserie] SQL: Parameter von Befehlen

Gruss

Coffeebean

4.942 Beiträge seit 2008
vor 7 Jahren

Hallo,

ExecuteNonQuery ist die falsche Methode, denn du möchtest ja gerade eine Abfrage (query) durchführen. Dafür gibt es z.B. ExecuteReader.
Lies dir am besten mal ein Tutorial oder z.B. Visual C# 2012 - 32.4 Das SqlDataReader-Objekt durch.

PS: Den Namen ExecuteNonQuery finde ich auch eigenartig - warum nicht einfach Execute für Insert, Update und Delete-Anweisungen?

F
10.010 Beiträge seit 2004
vor 7 Jahren

PS: Den Namen ExecuteNonQuery finde ich auch eigenartig - warum nicht einfach Execute für Insert, Update und Delete-Anweisungen?

Weil er keine Query also Nachfrage ist, denn er führt den Befehl ohne Datenrückgabe aus.

3.825 Beiträge seit 2006
vor 7 Jahren

Wie schon gesagt brauchst Du zum Lesen der Daten einen DataReader oder ein DataSet. Wenn Du die Daten auch ändern und zurückspeichern willst dann nimm gleich ein DataSet.

Beispiele findest Du hier :

http://download.seven-c.de/files/DatenbankenHowTo.htm#6

Das Beispiel aus "Daten ändern" kannst Du auch zum Daten lesen verwenden.

Benutze auf jeden Fall auch Parameter.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Asonger Themenstarter:in
10 Beiträge seit 2014
vor 7 Jahren

Ok, ich bin alles mal überflogen, jetzt weiß ich aber immer noch nicht ganz ob ich das richtig verstanden habe.

Ich möchte ja den Text in der Text Box mit dem in der Datenbank vergleichen.

bsp: txtB_Vorname -> Steht Bernd drin -> Datenbank unter der Spalte Vorname unter der ID 55 gibt es einen Bernd -> Dieser soll angezeigt werden.

Dasselbe mit ID, Nachname und Geburtsdatum.

private void Suche()
        {
            string suchwort = txtB_Vorname.Text;
            con.Open();
            SQLiteCommand cmd = con.CreateCommand();                                     //!!
            cmd.CommandText = "SELECT * FROM Member WHERE Vorname Like" + txtB_Vorname, txtB_Nachname, txtB_ID, txtB_Geburtsdatum;
            cmd.ExecuteReader();                                                         //!!
            con.Close();


            if (suchwort != cmd.CommandText)          //Wie frage ich die Datenbank ab ?!
            {
                cmd.CommandText = "SELECT ID, FROM Member";
                txtB_ID.Clear();
                txtB_ID.Text = txtB_ID.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Vorname, FROM Member";
                txtB_Vorname.Clear();
                txtB_Vorname.Text = txtB_Vorname.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Nachname, FROM Member";
                txtB_Nachname.Clear();
                txtB_Nachname.Text = txtB_Nachname.Text + cmd.CommandText;
                cmd.CommandText = "SELECT Geburtsdatum, FORM Member";
                txtB_Geburtsdatum.Clear();
                txtB_Geburtsdatum.Text = txtB_Geburtsdatum.Text + cmd.CommandText;

                //Soll vergleichen ob das Suchwort in der Datenbank vorhanden ist, 
                //falls ja, soll diese Zeile in Textbox Nachname, Vorname, ID und Geburtsdatum eingetragen werden 
                //und zum bearbeiten zur verfügung stehen.
            }
        }

3.003 Beiträge seit 2006
vor 7 Jahren

Ok, ich bin alles mal überflogen, jetzt weiß ich aber immer noch nicht ganz ob ich das richtig verstanden habe.

Hast du nicht, weil "überfliegen" nun einmal nicht reicht.

Dein Vorgehen sollte etwa so aussehen:

  1. Herausfinden, welche der Textboxen gefüllt ist, und das Ergebnis dieser Prüfung in einer Variable speichern
  2. speichern des Inhalts der Textbox, die gefüllt ist, in ein CommandParameter des SqlCommands
  3. setzen des CommandTexts in Abhängigkeit der Variable aus Schritt 1 ("Select * FROM table WHERE <<hier vergleichsspalte in abh. der Variable>> LIKE @parameterName"
  4. Absetzen des Commands und Verarbeitung des Ergebnisses.

LaTino
EDIT: wie Schritt 4 auszusehen hat, wurde dir ja bereits gesagt 😃

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

3.825 Beiträge seit 2006
vor 7 Jahren

Beispiel zu 1. bis 3. :

Mit If-Abfrage :

cmd.CommandText = "SELECT * FROM Member WHERE";
string vorname = txtB_Vorname.Text;
if (vorname != "") cmd.CommandText += " Vorname LIKE @Vorname AND";
...

Oder SQL Server machen lassen :

cmd.CommandText = "SELECT * FROM Member WHERE (Vorname LIKE @Vorname OR @Vorname = '') AND ...";

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.942 Beiträge seit 2008
vor 7 Jahren

Hallo FZelle,

ich meinte damit, eine Methode nach etwas zu benennen, was sie nicht ist, finde ich eigenartig.
Dieser Name ExecuteNonQuery ist mir bisher nur bei diesen .NET-Klassen untergekommen (und ich habe schon einige andere Frameworks und Libraries vorher benutzt).

F
10.010 Beiträge seit 2004
vor 7 Jahren

Der Name besagt nicht was die Funktion nicht macht.

Er sagt eindeutig "Execute NonQuery" also "führe eine Nichtabfrage aus".