verwendetes Datenbanksystem: SQLBase
Ich habe hier ein Programm, das mit SQLBase arbeitet. Dort wird eine Anfrage an das Datenbanksystem geschickt, die wie folgt aussieht:
Select distinct NAME1||' '||NAME2||' KD-Nr.: '||KUNDEN.KDNR||' '||KUNDEN.INFO from KUNDEN where KENNUNG=:1 and MDNR=:2 order by NAME1
Das Ergebnis ist etwas in der Art wie:
Kundenvorname Kundennachname KD-Nr.: 123456 Kundeninfo
So weit, so gut.
Nur, wie bekomme ich das nun mit SQL hin ?
die "||" Zeichen scheint SQL nicht zu kennen. In CSharp werden diese ja als ODER genutzt, aber ein ODER macht in der Abfrage keinen Sinn und auch das Ergebnis hat nichts mit einem ODER zu tun.
Es sieht mir eher so aus, als wenn man damit die Ausgabe gleich formatieren kann.
Es wird ja der VORNAME ausgegeben, dann ein Leerzeichen, dann der NAME, dann der Text "KD-Nr.:" gefolgt von der KUNDENNUMMER und der KUNDENINFO.
Klar, ein SELECT NAME1,NAME2,KUNDEN.KDNR, KUNDEN.INFO ..... würde mir die selben Daten liefern, aber nicht bereits formatiert.
Die formatierung wäre durchaus wichtig, da die Daten direkt aus der Datatable in eine ComboBox eingelesen und dort zur Auswahl bereitgestellt werden.
Jemand eine Idee, wie man das hinbekommen kann ?
SQL? Welches?
Beim MSSQL Server kannst Du z.B. mit + arbeiten.
Allerdings ist das Abfragen der einzelnen Spalten + das Aufbereiten dieser Daten bevor du sie im Control anzeigst, die deutlich bessere Variante.
Grundsätzlich wäre eine Suche nach "concat string sql" bestimmt schneller gewesen.
Hi,
ich verstehe das Anliegen ehrlich gesagt nicht ganz - du stellst hier irgendeine SQL-Syntax von SQLBase vor die offenkundig macht was du möchtest - definierst aber nicht selbst, was du eigentlich möchtest.
Nunja - dass diese Vorgehensweise nicht ganz so dolle war bzw. ist wird dir sicher bekannt sein - aber um eine entsprechende Formatierung hinzubekommen kannst du (wenn du die Daten erst einmal hast) z.B. String.Format verwenden:
String.Format("{0} {1} KD-Nr.: {2} {3}", entry.Name1, entry. Name2, entry.Nummer, entry. Info);
LG
Hallo Starfight,
ich verstehe dein Problem auch nicht so ganz.
Zur Ergänzung:
Wenn du wissen willst, was "||" in der SQLBase-Syntax macht googelt man danach:
Google-Suche nach SQLBase syntax
und nimmt den ersten Treffer
da wird der "||"-Operator als "String concatenation operator (||)" aufgeführt. Seite 47.
Wie man es in C# (besser) macht wurde ja bereits erwähnt.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Ich würde die Daten unformatiert abfragen und später erst mit String.Format formatieren.
Meiner Meinung nach sollte man in einer SQL Anweisungen nur in besonderen Fällen die Ausgaben formatieren.
Wenn du z.B. die Daten später an einer anderen Stelle brauchst oder ohne eine Formatierung oder gar in einem anderen Format, musst du entweder eine neue Methode bauen oder deine vorhandene mit Fummeleien ausrüsten um das aktuelle Format zu ersetzen/enftfernen.
Wenn du das Drei-Schichten Model verwendest, wäre deine aktuelle Anpassung aus meiner Sicht sogar ein Verstoß da die Datenschicht dann schon einen Teil der Anwendungslogik z.B. auch der späteren UI Ausgaben übernimmt.
Entsprechend würde deine aktuelle SQL Anweisung also schon die Verantwortung der höheren Schichten übernehmen.
Nachtrag:
@Coffeebean
Er will seine Ausgabe in dem angegeben Format ausgeben.
Im Endeffekt will er wohl nur eine Spalte mit den entsprechenden Werten in einem Format haben.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
SQL? Welches?
Beim MSSQL Server kannst Du z.B. mit + arbeiten.
Sorry, vergessen. Ja MSSQL
Allerdings ist das Abfragen der einzelnen Spalten + das Aufbereiten dieser Daten bevor du sie im Control anzeigst, die deutlich bessere Variante.
Ähm, mit + ?
[Ausprobier]
Cool, klappt. Herzlichen Dank
@Taipi88
Ich zitiere mal
So weit, so gut. Nur, wie bekomme ich das nun mit SQL hin ?
Sorry, das ich SQL nicht genauer definiert hatte.
@T-Virus
Wenn ich die Daten nachträglich aufbereiten muß, bedeutet das wieder eine zusätzliche schleife. Wozu, wenn man es gleich in der Abfrage mit erledigen kann ?
Und wie mein Satz "Die formatierung wäre durchaus wichtig, da die Daten direkt aus der Datatable in eine ComboBox eingelesen und dort zur Auswahl bereitgestellt werden." schon andeutet, nur zur Auswahl benötigt und sonst nicht weiter verwendet.
Aber, wie es scheint, habe ich doch keine andere wahl, da die Option mit dem "+" nicht mit INTEGER Werten klar kommt und eine Typumwandlung in der SELECT wohl nicht möglich ist.
Danke an alle für die Hilfe.
...und eine Typumwandlung in der SELECT wohl nicht möglich ist.
Doch, das geht prinzipiell:
CAST und CONVERT (Transact-SQL)
Bedeutet aber Aufwand in der Abfrage. Dann lieber eine zusätzliche Schleife im Programmcode. =)