Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Suchparameter an SQL übergeben


Ritzeratze - Sa 10.10.15 10:23
Titel: Suchparameter an SQL übergeben
Hi,

ich habe ein Formular (Kundensuchedetail) mit einem Textfeld (txtSuchen) in dem ich einen Kundenname eingeben kann.

Über ein SQL möchte ich den Wert in einer DB suchen.


SQL-Anweisung
1:
2:
3:
SELECT kNummer, kName, kVorname, kStrasse, kplz, Kort, Ktelefon1, Ktelefon2
FROM     Kunde
WHERE  (kName = [Kundensuchdetail].[txtsuchen.Text]);


funktioniert leider nicht.

Wie müsste der SQL denn korrekt aussehen ?

Danke, und Gruss
Ritze


Th69 - Sa 10.10.15 10:36

Hallo,

das Stichwort dafür lautet: SqlParameter
s. z.B. Lesson 06: Adding Parameters to Commands [http://www.csharp-station.com/Tutorial/AdoDotNet/Lesson06]

PS: Statt des im Artikel verwendeten Erzeugen eines eigenen SqlParameter-Objekts gibt es die SqlParameterCollection.AddWithValue-Methode [https://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlparametercollection.addwithvalue%28v=vs.110%29.aspx], um den Code kürzer und lesbarer zu machen (s. dortiges Beispiel) - vllt. ist dann doch 24.4 Parametrisierte Abfragen [http://openbook.rheinwerk-verlag.de/visual_csharp_2010/visual_csharp_2010_24_004.htm] für dich hilfreicher...


Ritzeratze - Sa 10.10.15 10:42

Hi Th69,

Danke für Deine Antwort.
meine anderen Suchparameter funktionieren ja. Hier ist nur das Problem, das der Suchstring aus einen anderen Formular kommt, und nicht genau weiß wie ich das Formualr ansprechen muss.


Gruss Ritze


Th69 - Sa 10.10.15 10:47

Von was für Formularen sprichst du denn? Verwendest du eine externe Komponente (z.B. DevExpress oder Telerik)?
Nur bei Reportgeneratoren kenne ich die in deinem SQL-Beispiel verwendete Syntax.


Ritzeratze - Sa 10.10.15 11:13

Siehe Oben .

Mein Formular heißt Kundesuchdetail und die Textbox dort heißt txtsuchen.


Th69 - Sa 10.10.15 11:31

Sorry Ritze, aber so kann ich dir nicht helfen.
Die von dir verwendete Syntax mit den eckigen Klammern ist kein Standard-SQL (und auch nicht direkt mit den Standard C# Datenbank-Komponenten verwendbar).
An welche Komponente übergibst du denn den SQL-String?


Ritzeratze - Sa 10.10.15 11:44

Ok, Schade,

muss ich selbst noch ein bißchen probieren. Könnte Dir das Projekt einmal schicken, aber leider hier nicht veröffentlichen.

trotzdem Danke für den Versuch.

Gruss und schönes Restwochenende
Ritze


Ralf Jansen - Sa 10.10.15 13:39

Zitat:
Hier ist nur das Problem, das der Suchstring aus einen anderen Formular kommt, und nicht genau weiß wie ich das Formualr ansprechen muss.


Gar nicht da die Codestelle die andere Form/das andere Window nicht kennt wenn du nicht einen Verweis darauf zu der Stelle wo du sie brauchst hin transportierst.
Instanzen von Klassen sind nicht einfach so überall bekannt man muss schon dafür sorgen das an der entsprechenden Stellen ein Verweis darauf da ist (z.B. in Form einer Variablen mit dem entsprechenden Verweis). Vielleicht hilft dir der Gedanke das eine Form/Window nichts besonders ist. Es ist eine Klasse von der man Instanzen erzeugen kann und die sich auch haargenau so verhalten wie andere Instanzen anderer Klassen. Sie hat halt die Fähigkeit sich irgendwo anzuzeigen so wie andere Klassen eben die Fähigkeit haben Verbindungen zu Datenbanken aufzubauen oder Dinge in Dateien zu schreiben haben oder oder oder ....

Beispiel: Du möchtest 2^zahl berechnen in einer ausgelagerten Methode die 2^x berechnen kann. Dein Gedankengang übersetzt (so wie ich deine Frage verstanden habe) würde folgendes bedeuten


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
class Program
{
    static void Main(string[] args)
    {
        double zahl = 5.0;
        double unbenutzerUnsinn = 1.0

        double result = ZweiHochX();
        Console.WriteLine(result);
    }

    static double ZweiHochX()
    {
        return Math.Pow(2.0, [double]);
    }
}


In ZweiHochX() double anzusprechen ist offensichtlich falsch. Welcher double denn? Man könnte als nächstes [zahl] anstatt [double] versuchen aber dir ist vermutlich klar das das genauso Unsinn ist. Ein Variablenname ist weder eindeutig noch überall bekannt sondern nur in dem Scope in dem die Variable definiert ist. zahl gibt es im Beispiel nur in der main Methode. Lösung? Natürlich du musst der Methode ZweiHochX einen Parameter geben und zahl übergeben. Und jetzt wiederhole ich die Aussage
"eine Form/Window ist eine Klasse wie jede andere auch".
Genauso wie zum Beispiel ein double.


ebk - Mo 26.10.15 00:40

@all, das stimmt zwar alles, könnt mir aber vostellen, dass er gar nicht vor hat auf irgendein Formular zu verweisen.
Das Codebeispiel sieht mir sehr nach Access-Zeugs aus(Querys die an ein Form gedunden sind)

@Ratze
Falls deineFrage also nur darauf abziehlt, wie ein sqlstring aussehen muss, um innerhalb des Winform Kundedetail zu filtern, mit einem Wert aus einem textfeld, dann geht das so:

Quelltext
1:
WHERE DeineTabelle.DeinField = " & Me.DeinTextfeld.Text // wenn DeinFiled ein numerischer Wert ist.                    

sonst:

Quelltext
1:
WHERE DeineTabelle.DeinField = "'" & Me.DeinTextfeld.Text & "'"                    

Moderiert von user profile iconTh69: Code-Tags hinzugefügt