Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Variable in Where-Klausel abfragen
havefun_2 - Mi 18.12.13 13:05
Titel: Variable in Where-Klausel abfragen
Hallo zusammen,
trotz ausgiebigem Suchen und Probieren,ist es mir nicht gelungen,eine SQL-Abfrage zu erstellen die eine Variable
auswertet.
So ungefähr habe ich es mir vorgestellt:
SQL-Anweisung
1:
| WHERE ("Spaltenname" ist "Variablenname") |
im Abfragegenerator sieht es so aus:
SQL-Anweisung
1:
| WHERE (Kuerzel = '@sKuerz') |
Seid bitte nachsichtig,ich bin kein erfahrener Programmierer
Danke,
Havefun
Moderiert von Th69: SQL-Tags hinzugefügt
havefun_2 - Mi 18.12.13 14:31
Hallo Ralf,
Lesen heißt bei mir nicht unbedingt verstehen.
Es ist eine Access-Datenbank und für mich wäre eine Schritt für Schritt-Anleitung genau das Richtige.
Danke,
Havefun
Moderiert von Th69: Full-Quote entfernt.
Ralf Jansen - Mi 18.12.13 14:36
Zitat: |
Lesen heißt bei mir nicht unbedingt verstehen. |
Verstehen und lernen bedeutet lesen, probieren, scheitern, und retry bis es geht. Du solltest es zumindest probieren. Lesen ist nur der kleinste Teil.
Zitat: |
Es ist eine Access-Datenbank und für mich wäre eine Schritt für Schritt-Anleitung genau das Richtige. |
Die auch noch gleich kompiliert. Na klar :roll:
Für den Königsweg mit Vorkauen bin ich der falsche Mann.
havefun_2 - Mi 18.12.13 14:57
Trotzdem danke für deine Mühe.
Havefun
havefun_2 - Fr 20.12.13 10:44
Hallo zusammen,
ich kriege das einfach nicht hin.
Dieser Datenbankkram macht mich völlig kirre.
Verstanden habe ich inzwischen,daß man in der Abfrage nicht direkt auf eine Variable zugreifen soll.
Der Weg führt also über Parameter.
C#-Quelltext
1:
| this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox2(this.telefon1DataSet.einzelne_Telefonliste); |
Die Abfrage Abfr_TextBox2 sieht folgendermaßen aus:
SQL-Anweisung
1: 2: 3:
| SELECT ID, Teilnehmer, Tel_Nr, Kuerzel FROM [einzelne Telefonliste] WHERE (Teilnehmer LIKE "?") |
Wenn mir jemand erklären könnte wie ich dem Parameter den Inhalt einer Variable (sKuerz) übergeben muß,
wäre Weihnachten gerettet.
Gruß,
Havefun
Moderiert von Christian S.: C#-Tags hinzugefügt
Moderiert von Christian S.: SQL-Tags hinzugefügt
Ralf Jansen - Fr 20.12.13 11:56
Ein Tableadapter generiert das eigentlich selber?
Du hast ja vermutlich im DataSet Designer den Tableadapter erzeugt und dann dort die Funktion 'Abfrage hinzufügen' (oder so ähnlich, ich benutzte selbst ein englisches VS da heißts 'Add Query') benutzt. Wenn du dort dein SQL mit Platzhalter für den Parameter eingibst sollte dir eine Methode erzeugt werden dem du nur noch die Variable übergeben mußt. Problem könnte hier sein wie man den Parameter angibt. ? könnte richtig sein wenn du einen Jet Treiber über ODBC benutzt (ich selbst benutzte kein ACCESS). Die Hochkommata sind aber bestimmt falsch. Parameter mußt du eigentlich nie Quoten. Es ist ja immer ein Variablenwert gemeint und kann nicht mit einem Spalten oder Tabellennamen verwechselt werden.
Die im Tableadapter erzeugten Methoden solltest bei dem angebotenen Präfix belassen und nicht umbenennen sondern nur ergänzen. Ich und viele andere würden sofort auf die Schlüsselbegriffe FillBY oder GetDataBy anspringen. Bei Abfr_TextBox2 mußt ich erst mal lang überlegen was das soll. Ein verständliches Namensschema wäre da die Parameter anzugeben also in deinem Fall GetDataByTeilnehmer bzw. FillByTeilnehmer.
Und dann solltest du die mit
C#-Quelltext
1:
| einzelne_TelefonlisteTableAdapter.FillByTeilnehmer(this.telefon1DataSet.einzelne_Telefonliste, sKuerz) |
aufrufen können. Für den Lerneffekt könntest du, wenn es dann funktioniert, mal in die generierte Methode reinschauen was der Designer den für Code erzeugt. Der liegt ja als stinknormaler C# Code in deinem Projekt rum.
Ralf Jansen - Fr 20.12.13 12:53
@TH69: Ich glaube jetzt verwirren wir den Threadstarter nur. Ein Tableadapter benutzt zwar intern eine DataAdapter aber selbst ist er keiner. Und um zu wissen wie ein Tableadapter zu erzeugen und zu verwenden ist braucht man eigentlich nicht wissen wie ein DataAdapter funktioniert oder wie man den über einen Designer konfiguriert.
havefun_2 - Fr 20.12.13 14:18
Hallo zusammen.
erst mal vielen Dank für eure Hilfe.
Es tut mir leid wenn ich zu wenige/falsche Informationen weitergegeben habe.
Das mit dem Präfix habe ich verstanden und werde es zukünftig nur noch ergänzen.
Der momentane Stand ist der:
Anzeige im Konfigurations-Assistent für TableAdapter-Abfragen
SQL-Anweisung
1: 2: 3:
| SELECT Teilnehmer, Tel_Nr, ID, Kuerzel FROM [einzelne Telefonliste] WHERE (Teilnehmer LIKE ?) |
C#-Quelltext
1: 2: 3: 4: 5:
| private void button1_Click(object sender, EventArgs e) { suchnam = textBox1.Text; this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox(this.telefon1DataSet.einzelne_Telefonliste,suchnam); } |
Wenn ich einen Such-String in die textBox1 eingebe,wird er in die Variable übernommen.
In dem DataGridView wird aber kein Ergebnis angezeigt.
Anzeige im Konfigurations-Assistent für TableAdapter-Abfragen
SQL-Anweisung
1: 2: 3:
| SELECT ID, Teilnehmer, Tel_Nr, Kuerzel FROM [einzelne Telefonliste] WHERE (Teilnehmer IS NOT NULL) |
C#-Quelltext
1: 2: 3: 4: 5:
| private void button2_Click(object sender, EventArgs e) { this.einzelne_TelefonlisteTableAdapter.Ges_List(this.telefon1DataSet.einzelne_Telefonliste); textBox1.Text = ""; } |
Wird button2 betätigt erscheint die komplette Liste.
Bis dann,
Havefun
Moderiert von Th69: SQL-Tags hinzugefügt
Moderiert von Th69: C#-Tags hinzugefügt
Ralf Jansen - Fr 20.12.13 14:29
Fehlen dir vielleicht in deinem suchnam Parameter die Wildcards. Wenn du per LIKE ohne Wildcards suchst dann wäre das nicht anders als wenn du auf Gleichheit prüfst. Dann würdest du aber im SQL auch gleich = verwenden und nicht LIKE.
Also zum Beispiel
C#-Quelltext
1:
| this.einzelne_TelefonlisteTableAdapter.Abfr_TextBox(this.telefon1DataSet.einzelne_Telefonliste,'%' + suchnam + '%'); |
Edit. Deinen Code bitte in Tags schreiben. Gibt auch einen Knopf im Editor dafür (Die Combobox mit dem + Knopf daneben). Die Mods haben jetzt schon mehrmals hinter dir her korrigiert. Irgendwann haben die sonst keine Lust mehr ;)
havefun_2 - Fr 20.12.13 23:05
Hallo Ralf,
vielen Dank für deine Hilfe.
Die Abfrage funktioniert.
Unter "Bereiche" habe ich auch die Combobox gefunden und werde sie zukünftig benutzen.
Gruß,
Havefun
Moderiert von Th69: Full-Quote entfernt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!