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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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?
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.
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
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.
}
}
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:
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)
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
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).
Der Name besagt nicht was die Funktion nicht macht.
Er sagt eindeutig "Execute NonQuery" also "führe eine Nichtabfrage aus".