Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - SQL Server Compact Abfrage
interessierter - So 16.12.12 14:48
Titel: SQL Server Compact Abfrage
Hallo Zusammen
Hab da ein kleines Problem mit einer Datenbank abfrage. Habe eine Datenbank mit ID, Name, Vorname angelegt und diese mittels C# mit Daten befüllt. Die Einträge werden mittels eines dataGridView angezeigt. Nun will ich die Datenbank nach Name durchsuchen, so das es mir im dataGridView alle Zeilen anzeigt, welche in der Kolone Name dem Suchbegirff entsprechen.
Habe schon sehr lange anch einer Anleitung gesucht, finde aber nichts passendes, zudem kriege ich immer dieselbe Fehlermeldung:
Fehler beim Analysieren der Abfrage. [Token line number = 1, token line offset = 37, token in error = likeMüller] (Müller ist mein Suchbegriff)
Folgend mein Lösungsansatz. Kann mir bitte jemand sagen was ich falsch gemacht habe?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void button5_Click(object sender, EventArgs e) { string suchbegriff = textBox8.Text; try { SqlCeDataAdapter ada = new SqlCeDataAdapter("select * from Kundenbank where Name like" + suchbegriff, con); DataTable dt = new DataTable(); ada.Fill(dt); dataGridView1.DataSource = dt; } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
Grüsse
interessierter
Th69 - So 16.12.12 15:44
Hallo,
da fehlen die Anführungsstriche im SQL-Ausdruck für den Suchbegriff.
Anstatt jedoch diese händisch hinzuzufügen, solltest du
SQL-Parameter [
http://www.mycsharp.de/wbb2/thread.php?threadid=66704] benutzen.
Bei einem Vergleich mittels "like" solltest du jedoch noch passende Wildcards einsetzen (% und/oder _), s.
SQL Wildcards [
http://www.w3schools.com/sql/sql_wildcards.asp].
Diese mußt du dann aber an den SQL-Parameter selber hinzufügen, z.B.
C#-Quelltext
1: 2: 3: 4:
| sqlCommand.Parameters.AddWithValue("@SearchPattern", suchbegriff + "%");
sqlDataAdapter.SelectCommand.Parameters.AddWithValue("@SearchPattern", suchbegriff + "%"); |
P.S. Für Suche (bzw. Filterung) im DataGridView kannst du auch eine
DataView und dessen
Filter-Eigenschaft benutzen:
C#-Quelltext
1:
| dataTable.DefaultView.Filter = "Name like '" + suchbegriff + "%'; |
(hier muß man (leider) von Hand die Parameter als
string zusammensetzen)
interessierter - So 16.12.12 23:29
Ich habe es jetzt eher zufällig geschafft die Suchabfrage im dataGridView anzuzeigen, verstehe aber die Theorie bezüglich den Anführungsstrichen noch nicht. Ich möchte gerne wissen was die Anführungsstriche im folgenden Code bewirken. Was machen diese Anführungsstriche genau und wieso braucht es diese?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private void button5_Click(object sender, EventArgs e) { string suchbegriff = textBox8.Text; try { SqlCeDataAdapter ada = new SqlCeDataAdapter("select * from Kundenbank where Name like'" + suchbegriff + "'", con); DataTable dt = new DataTable(); ada.Fill(dt); dataGridView1.DataSource = dt; } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
Gruss
interessierter
Th69 - Mo 17.12.12 10:50
Hallo,
die einfachen Anführungsstriche in SQL bedeuten das gleiche wie die doppelten Anführungsstriche in C#, also String-Literale.
Ohne die Anführungsstriche versucht SQL dies als Spaltenname zu interpretieren (bzw. da du im ersten Code das Leerzeichen vergessen hast, wurde dort "likeMüller" als fehlerhafter Operator angesehen).
Verwende aber zwingend die SQL-Parameter - ansonsten teste jetzt mal, was passiert wenn du "Müller's" als Suchbegriff eingibst :think:
interessierter - Mo 17.12.12 22:15
Das mit den Parametern und Wild Cards werde ich jetzt gleich als nächstes in Angriff nehmen, will ja schliesslich das die Suchfunktion in einer realen Situation in der Wirtschaft etwas taugen würde.(zumindest in einer Mini-Form) :)
Danke für die Wegleitungen. Jetzt ist mir auch die Therorie bez. den Literalen klar geworden. So nun ab ans Werk.
Es grüsst
interesierter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!