| Autor |
Beitrag |
mo0n_
      
Beiträge: 50
Win7
C#
|
Verfasst: Di 24.01.12 12:09
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
|
|
Th69
      

Beiträge: 4800
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 24.01.12 12:42
Hallo,
deine SQL-Abfrage ist falsch. Benutze SQL-Parameter, s.a. [Artikelserie] SQL: Parameter von Befehlen
Für diesen Beitrag haben gedankt: mats74
|
|
mo0n_ 
      
Beiträge: 50
Win7
C#
|
Verfasst: Di 24.01.12 14: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
      

Beiträge: 4800
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 24.01.12 15:13
Hallo mo0n_,
ich hoffe, du hast jetzt nicht einfach die Anführungsstriche in den SQL-String geschrieben (Stichwort: 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_ 
      
Beiträge: 50
Win7
C#
|
Verfasst: Di 24.01.12 15: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
      

Beiträge: 4800
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 24.01.12 16:46
Ich glaube, ich rede gegen die Wand 
|
|
mats74
      
Beiträge: 189
Erhaltene Danke: 26
Win 10
VS 2017/19, C++, C#
|
Verfasst: Di 24.01.12 17:02
... das sieht ganz so aus  .
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  aufgegangen (und viel Arbeit) ...
_________________ Gruss
mats74
|
|
mo0n_ 
      
Beiträge: 50
Win7
C#
|
Verfasst: Di 24.01.12 17: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
      

Beiträge: 4800
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 24.01.12 17: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!
Für diesen Beitrag haben gedankt: mo0n_
|
|
Parn
Hält's aus hier
Beiträge: 8
|
Verfasst: Fr 20.04.12 07: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
|
|
Th69
      

Beiträge: 4800
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 20.04.12 08:37
Hallo Parn,
unter DataColumn.Expression ist beschrieben, welche Syntax der Filter annimmt.
In deinem Beispiel z.B. mittels "OR":
C#-Quelltext 1:
| kontakteBindingSource.Filter = String.Format("Firma LIKE '%"+textBox1.Text+"%'" + " OR " + "Ort LIKE '%"+textBox1.Text+"%'"); |
P.S. Die deutsche Hilfe dazu ist leider nicht so zu empfehlen (da einige Schlüsselwörter übersetzt wurden - obwohl das keinen Sinn macht, s.a. mein Beitrag zu myCSharp.de - bindingSource.Filter --> Filtern nach Spalten die keinen Eintrag enthalten).
|
|
Parn
Hält's aus hier
Beiträge: 8
|
Verfasst: Mo 23.04.12 10:31
Vielen Dank!
das war genau, was ich wissen wollte.
mfg Parn
|
|