Entwickler-Ecke

Netzwerk - sql select funktioniert nicht wie gewünscht


moori64 - Do 19.01.12 19:48
Titel: sql select funktioniert nicht wie gewünscht
Hallo,

ich möchte in einen data set ein sql statement absetzten , dies funktioniert im abfragegenerator sehr gut.
wenn ich das aber in winforms ausprobiere eben nicht.

woran liegt das ?


Trashkid2000 - Do 19.01.12 22:35

Hi,
wenn ich Deinen Beitrag so lese und versuche, das in (korrekte) deutsche Sprache zu übersetzen ist das schon ein Akt. Wenn Du ein Statement (mit fehlenden Wörtern oder einer Pseudosprache) zum Server schickst, ist es kein Wunder, dass er es nicht versteht oder es nicht interpretieren kann, oder es versucht zu interpretieren, und dann nur Müll bei rauskommt!
SCNR :?

Was ist denn plz für ein Datentyp?


daeve - Fr 20.01.12 02:06

ein wenig mehr Code wäre hilfreich... und wie schon Trashkid erwähnt hat, aus deinen "Sätzen" kann man sich schlecht was vorstellen.


moori64 - Fr 20.01.12 11:47

Hallo,

ja da habe ich schon wieder zulange gearbeitet und dann kommt soetwas bei raus.

Mehr Quelltext gibt es da garnicht.
Ich bauen mir ein Dataset und ziehe mir das per Drag und Drop in die Maske ,
dann gehe ich auf die erweiterten Eigenschaften und auf den Reiter Abfrage hinzufügen.
Dort gibt es ein Abfragegenerator und den nutze ich dann. Im Feld Filter schreibe ich dann


C#-Quelltext
1:
like@ Ort + '%'                    


dann steht in der Abfrage


C#-Quelltext
1:
2:
3:
Select feld1, feld2, feld3,
from customers
where  (Ort Like @Ort + '%')


Nun müsstest du mir erklären , wie du zu der aussage kommst wenn man pseudocode schickt , bekommt man nur müll zurück.
Ist das den müll was ich geschrieben habe ?

Nun kann man diese Abfrage testen und man erhält ein suchfenster, wo ich dann denn gesuchten eintrag reinschreibe
und dies funktioniert mit der plz oder jeden anderen suchfeld.
wenn ich aber nun die plz in winforms testen will geht es nicht , alles anderen felder mit stadt , name usw funktionieren
einwandfrei.
das feld plz ist vom typ char , da ich ja nicht weiß ob es sich immer um zahlen handelt.


viele grüße

uwe


daeve - Fr 20.01.12 15:51

was bekommst du für eine Fehlermeldung ? wie weit kommst du mit debugging ?

eigentlich funktioniert dein Code mit allen Feldern ausser mit plz ?


moori64 - Fr 20.01.12 16:10

Hallo David ,
ich bekomme keine Fehlermeldung nur die Felder sind eben leer und das ist mein Problem,
im Abfragegenerator klappt die Abfrage mit der Postleitzahl wunderbar, ich verstehe das auch nicht.


Viele Grüße uwe


Ralf Jansen - Fr 20.01.12 16:36

Ich könnte mir vorstellen das du das % schon im Parameter @Ort selbst unterbringen solltest. So wie jetzt könnte ich mir vorstellen das die meisten Datenbank Server damit ein Problem haben das zu interpretieren. Sich einen Parameter wie eine einfache Textersetzung vorzustellen ist eh oft falsch.


daeve - Fr 20.01.12 17:20

versuch doch mal nur:


C#-Quelltext
1:
where (Ort Like @Ort)                    


das was Ralf meint könnte gut sein.


moori64 - Fr 20.01.12 19:25

hallo ihr beiden nicht missverstehen, das mit den ort klappt nur wenn ich eine zahl abfragen will dann eben halt nicht.
aber im abfragegenerator kann man die abfrage testen und da funktioniert es mit zahl und buchstabe.

viele gruüße uwe


daeve - Fr 20.01.12 19:40

ev. hast du ein convertierungsproblem, schau doch mal im debugger wie deine Variablen aussehen(Inhalt) und versuche dann den Queriestring genau so im SQL Managemend Studio...
musst halt den Fehler suchen und testen. Wie man debugged weisst du oder ?

Der Generator macht etwas im Hintergrund was du nicht machst in deinem Code...


Trashkid2000 - Fr 20.01.12 23:32

Hi,
also ich mische mich jetzt mal wieder ein, auch wenn ich Dich etwas gedisst haben sollte :?
Das, was ich meinte, ist einfach, dass wenn man etwas zum DBMS schickt, was nicht verstanden werden kann, bekommt man halt ein falsches Ergebnis zurück (in Deinem Fall gar nichts).

Der LIKE-Operator wird auf Strings angewendet.
Kurzes Beispiel: Du hast einen Ort Berlin, und der hat die ID 45.
Wenn Du nun ein LIKE ala %erl% machst, so findet der Server den Ort, wenn Du aber ein LIKE %45% machst, halt nicht. Wie auch?? Er matcht ja nur den Namen.
Hoffe, dass es ein wenig verständlich ist, und Du nun weisst, dass Du die Query irgendwie umschreiben musst...


ramatus - Sa 21.01.12 09:43

Hallo,

das ist nicht so schlimm, wenn ich die komplette PLZ in das Feld eingebe findet er auch die Städte,
nur ich möchte das halt nicht immer einzeln eingeben sondern nur abfragen , zeige mir alle städte die in der plz region
1 liegen. das beispiel mit den like habe ich von ein schulungs cd. ich dachte ja das die wenigstens wissen was sie machen.


viele grüße

uwe


Trashkid2000 - Sa 21.01.12 13:11

Ach, Du bist hier mit mehreren Accounts unterwegs?
Ist ja kompliziert.
user profile iconramatus hat folgendes geschrieben Zum zitierten Posting springen:
[...]wenn ich die komplette PLZ in das Feld eingebe findet er auch die Städte[...]
Das bezweilfle ich ja irgendwie. Zumindest, wenn PLZ und Ortsname in verschiedenen Spalten stehen (so wie es auch sein sollte), und es nicht in der Form "10245 Berlin" in die Datenbank geklatscht wurde.

Also wenn PLZ und Ort in der Tabelle als varchar gespeichert sind, so dürfte Dir so ein Statement weiterhelfen:

SQL-Anweisung
1:
2:
3:
SELECT Ort, PLZ, ...
FROM customers
WHERE  (Ort Like @Ort) OR (PLZ Like @Plz);

@Ort bekommt die Platzhalter "%...%" und @Plz nur "...%". Somit werden Orte inkl. PLZ gefunden, wo @Ort irgendwo im Ortsnamen vorkommt, oder wo die PLZ so anfängt, wie es in @Plz eingeschränkt wurde.


Ralf Jansen - Sa 21.01.12 13:41

Ähm .... gilt hier user profile iconramatus == user profile iconmoori64 ??


Th69 - Sa 21.01.12 14:04

Hallo zusammen,

ich habe den Doppel-Account schon gemeldet (gemäß Richtlinien 4.7) und daher schließe ich dieses Thema hier solange sich nicht ein Admin dessen angenommen hat.


Christian S. - Sa 21.01.12 23:10

Hallo!

Das mit dem Doppelaccount hat sich geklärt.

Was aber bitte noch behoben wird, ist der nicht-existente erste Beitrag. Das ist sehr unhöflich gegenüber anderen Nutzern, wenn die erstmal den "wirklichen" Eröffnungsbeitrag im Thread suchen dürfen! :mahn:

Grüße,
Christian


moori64 - So 22.01.12 10:14

hallo christian,

wie trashkid schon bemerkte war der erste artikel nicht wirklich verständlich vormuliert .
deshalb habe ich ihn entfernt und darunter versucht mein problem besser zu beschreiben.
dies bitte ich zu entschuldigen.


mein problem hat sich aber immer noch nicht gelöst.

ich will in der spalte filter vom ort und spalte postleitzahl immer abfrage durchführen.
im abfragegenrator kann ich dieses statement doch testen und da schicke ich das doch auch an die datenbank und es funktioniert tadellos.


gruß uwe


Ralf Jansen - So 22.01.12 15:26

Damit wir das auch wirklich verstehen wo dein Problem liegt zeig uns am besten dein SQL aus dem Designer das funktioniert und deine Codeentsprechung die nicht funktioniert.
Ich kann nur Vermuten das du von einer an einem Tableadapter generierten Methode sprichst. Wenn dem so ist würde der generierten Code aus der Designer.cs (nur dieser Methode!) ebenfalls helfen. Am besten dazu noch die Spaltendefinitionen der betroffenen Tabelle.


moori64 - So 22.01.12 16:38

Hallo Ralf,

damit ihr mein Problem besser versteht , habe ich mal ein paar Screenshorts gemacht.




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  // 
            this.pLZ1ToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.plzToolStripLabel1,
            this.plzToolStripTextBox1,
            this.pLZ1ToolStripButton});
            this.pLZ1ToolStrip.Location = new System.Drawing.Point(050);
            this.pLZ1ToolStrip.Name = "pLZ1ToolStrip";
            this.pLZ1ToolStrip.Size = new System.Drawing.Size(122425);
            this.pLZ1ToolStrip.TabIndex = 3;
            this.pLZ1ToolStrip.Text = "pLZ1ToolStrip";
            //



Das ist der Code der in der Form1.Designer.cs drin steht mehr nicht.



Gruß uwe


Trashkid2000 - So 22.01.12 19:05

user profile iconmoori64 hat folgendes geschrieben Zum zitierten Posting springen:
[...]Das ist der Code der in der Form1.Designer.cs drin steht mehr nicht.[...]
Nicht wirklich, oder?
Erstens ist das bestimmt nicht der ganze Code des Designers, und zweitens hilft der Code überhaupt nicht bei dem Problem.
So langsam verstehe ich das Problem (auch) überhaupt gar nicht mehr...
ich meine, im Designer siehst Du doch das korrekte Statement. Du musst das doch bloß noch in Code umsetzen.
Und die Frage, mit welcher "Schnittstelle" Du auf die Datenbank zugreifst, ist, glaube ich, immer noch nicht geklärt.


Ralf Jansen - So 22.01.12 19:30

Zitat:
Das ist der Code der in der Form1.Designer.cs drin steht mehr nicht.


Das hilft nicht. Ich meinte den Code der Designer Datei deines typisierten Datasets/Tableadapters oder was du auch immer zum Zugriff auf die Datenbank benutzt hast.
Wenn du nicht weißt wie du dahin kommst gehe zu dem Code in dem du die generierte Methode aufrufst, öffne das Contextmenu auf der Methode und klicke 'Go To Definition'.
Und wo wir dann gerade beim Code sind der die generierte Methode aufruft zeig uns den auch gleich.