Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Suche mit Filterfunktion in einem DataGridView
mo0n_ - Di 24.01.12 13:09
Titel: Suche mit Filterfunktion in einem DataGridView
Hallol liebe Community.
Ich habe in einem DataGridView Inhalte einer aus einer Tabelle bestehenden Datenbank anzeigen lassen.
Nun möchte ich eine Suchefunktion mit Filter hinzufügen.
Hier mein bisheriger Sourcecode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| string suche = textBox1.Text; OleDbConnection myConnection = new OleDbConnection(Settings.Default.Datenbank1ConnectionString); myConnection.Open();
string mycommand = "SELECT * FROM Kontakte WHERE Firma ="+suche;
OleDbCommand cmd = new OleDbCommand(mycommand, myConnection); OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read()) { MessageBox.Show("Datensatzgefunden!");
} reader.Close();
myConnection.Close(); |
Bisher wollte ich nur erreichen, dass bei einem Abfragetreffer eine Messagebox aufpoppt.
Allerdings öffnet sich nur die folgende Fehlermeldung:
Für mindestens einen Parameter wurde kein Wert angegeben
Moderiert von
Th69: C#-Tags hinzugefügt
mo0n_ - Di 24.01.12 15:40
hallo Th69,
danke für deine Antwort.
Leider bin ich bis dato noch nicht viel weiter gekommen.
Könntest du mir ein Beispiel einer funktionierenden SQL Abfrage posten?
das wäre super nett.
Danke im Vorraus.
----------------------------------------------------------------------------
ARGH. Meine Güte was für ein dämlicher Fehler!
danke TH69.
Es hat funktioniert !
2 Stunden sinnloses rumschrauben für 2 ' ....
Th69 - Di 24.01.12 16:13
Hallo mo0n_,
ich hoffe, du hast jetzt nicht einfach die Anführungsstriche in den SQL-String geschrieben (Stichwort:
SQL-Injection [
http://de.wikipedia.org/wiki/SQL-Injection])?
Darum habe ich dir ja explizit den Link auf die SQL-Parameter gegeben, denn dies ist der einzig richtige Weg.
Ansonsten probiere mal "mo0n_'s Firma" einzugeben...
mo0n_ - Di 24.01.12 16:34
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:
| string suche = textBox1.Text;
OleDbConnection myConnection = new OleDbConnection(Settings.Default.Datenbank1ConnectionString); myConnection.Open();
string mycommand = "SELECT * FROM Kontakte WHERE Firma ='" + textBox1.Text + "'";
OleDbCommand cmd = new OleDbCommand(mycommand, myConnection); OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read()) { string row = ""; for (int i = 0; i < reader.FieldCount; i++) { row += reader.GetValue(i).ToString() + ", "; } } reader.Close();
myConnection.Close(); |
das ist mein jetziger sc.
So hatte es funktioniert
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Di 24.01.12 17:46
Ich glaube, ich rede gegen die Wand :gruebel:
mats74 - Di 24.01.12 18:02
... das sieht ganz so aus :wink: .
Also von meiner Seite ein Dankeschön für deine Hinweise.
In diesem Zusammenhang habe ich in unseren Codes noch einige versteckte Sicherheitslücken entdeckt, die mir vorher nie aufgefallen sind.
Einige Codeelemente unserer internen Programme sind nie auf Sicherheitslücken geprüft worden.
Da ist mir also ein :idea: aufgegangen (und viel Arbeit) ...
mo0n_ - Di 24.01.12 18:03
naah. habe nochmal drüber nachgedacht un bemerkt, dass man es viel einfacher lösen kann.
poste meine endlösung nochmal für alle nicht-genies:
C#-Quelltext
1:
| kontakteBindingSource.Filter=string.Format("Firma like '%"+textBox1.Text+"%'"); |
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Di 24.01.12 18:28
Hallo,
auch hierbei kann dir ein Anführungsstrich (') im Suchtext Probleme bereiten...
Und demnächst bitte selber hier im Forum die C#-Tags um deinen Sourcecode setzen!
Parn - Fr 20.04.12 08:51
Hallo,
ich habe noch eine Frage zu diesem etwas älteren Thema.
Vielleicht weiß ja einer grade ne schnelle Antwort.
Der Code (der bekanntlich Probleme mit den ' bereiten kann) filtert ja nur für eine Spalte:
C#-Quelltext
1:
| kontakteBindingSource.Filter=string.Format("Firma like '%"+textBox1.Text+"%'"); |
wenn man jetzt aber nicht nur in der Spalte "Firma" suchen, sondern mit der gleichen TextBox auch sie danebenliegenden Spalten, zB "Ort" filtern möchte, so dass bei folgender Tabelle...
Firma Ort
Huber AG Karlsruhe
Karolinger München
Weinstein Happenbach
mit der Filtereingabe "Karl" die ersten beiden Einträge angezeigt werden.
I'm looking forward to your replies!
greetings Parn
Parn - Mo 23.04.12 11:31
Vielen Dank!
das war genau, was ich wissen wollte.
mfg Parn
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!