Autor Beitrag
mo0n_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: 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:

ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: Di 24.01.12 15:34 
ausblenden 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 24.01.12 16:46 
Ich glaube, ich rede gegen die Wand :gruebel:
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 24.01.12 17: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) ...

_________________
Gruss
mats74
mo0n_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50

Win7
C#
BeitragVerfasst: 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:

ausblenden C#-Quelltext
1:
kontakteBindingSource.Filter=string.Format("Firma like '%"+textBox1.Text+"%'");					


Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4800
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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":
ausblenden 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



BeitragVerfasst: Mo 23.04.12 10:31 
Vielen Dank!
das war genau, was ich wissen wollte.
mfg Parn