Laden...

SQL String zusammen bauen

Erstellt von LuckyStrike vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.590 Views
L
LuckyStrike Themenstarter:in
168 Beiträge seit 2008
vor 15 Jahren
SQL String zusammen bauen

verwendetes Datenbanksystem: <Oracle 9i>

Hallo zusammen,

hab ne kurze frage. möchte eine SQL Anweisung zusammen bauen, bisher mache ich das über die OracleCommand.Parameters.Add Funktion. Wie kann ich jetzt nach mehreren "Parametern" suchen?
Also wenn ich nen String habe:

Select * From Tab Where Kunde = :Var1

dann kann ich ja ein Parameter übergeben. Aber wie löse ich da am elegantesten wenn ich nach zwei Kunden suchen will? Muss ich dann zwei SQL Strings vorhalten und wenn der ANwender zwei Kunden sleketiert dann entweder den einen (mit einem Param.) oder den anderen (mit meheren Parametern) SQL-String nehmen?

Danke für eure Hilfe ...

365 Beiträge seit 2007
vor 15 Jahren

Hallo LuckyStrike,

benutze doch ein OR in deinem Statement wenndu nach 2 Begriffen mit der
selben Spalte suchst.


SELECT * FROM Tab 
WHERE Kunde = 'James' OR Kunde = 'Paula'

104 Beiträge seit 2006
vor 15 Jahren

Aber wenn schon dann bitte in Parameterschreibweise

Select * From Tab Where Kunde = :Var1 OR Kunde = :Var2
365 Beiträge seit 2007
vor 15 Jahren

Ups 😁

L
LuckyStrike Themenstarter:in
168 Beiträge seit 2008
vor 15 Jahren

danke für die schnelle Hilfe. Das mit dem OR ist klar, aber entsprechend der Eingabe des Anwenders soll entweder nach einem Kunden oder nach zwei Kunden gesucht werden. Kann ich das irgendwie in einem SQL String abbilden?

Aber wenn schon dann bitte in Parameterschreibweise

Select * From Tab Where Kunde = :Var1 OR Kunde = :Var2  

Müsste dann ja zwei Strings vorhalten, einmal mit einem und einmal mit zwei Variablen.

Problem ist, dass das Beispiel von oben nur beispielhaft ist 😁

Eigentlich habe ich 5 Parameter, wenn jeder nur einzeln vorkommt geht das mit Add.Paramters recht gut, aber wenn ich jetzt Mehrfach filtern will wirds schwierig, also wenn ich jedem Parameter mehrere Variablen übergeben will. (Or Kunde1 Or Kunde 2 Or Kunde 3 ...)

Stehe da irgendwie auf dem Schlauch 🙁

365 Beiträge seit 2007
vor 15 Jahren

Ich würde dir spontan eine methode mit Arrays empfehlen.
Dort lässt du einen Stringbuilder in einer Schleife laufen.
Bei Variable string nen String Array, bei int einfach int Array
In etwa so:


public string MeineMethode(string[] meineVars)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Select * From Tab Where Kunde = " + meineVars[0].ToString());
    for(int i = 1; i < meineVars.Lenght; i++)
    {
        if(meineVars.Lenght > i)
        {
            sb.Append(" OR Kunde = " + meineVars[i].ToString());
        }

    }

    return sb.ToString();
}

Könnten Fehler drin sein, ist ja nur zum Verständniss....

Edit: Das ist jetzt für nen Sql String ....
Keinen Schimmer wie das mit Parametern funktioniert. Sollte aber anpassbar sein ....

greetz kubi.

104 Beiträge seit 2006
vor 15 Jahren

Die Lösung von Kubi ist richtig, nur würd ich dort ebenfalls lieber mir Parametern arbeiten 😉
Sql Strings die aus direkten Usereingaben zusammengebaut werden können sehr gefährlich sein...

365 Beiträge seit 2007
vor 15 Jahren

Muss Ich dir Recht geben ....
Habe grad noch überlegt beim SQL Server müsste Ich Strings noch in Hochkommata setzen.
Das würde bei Parametern wegfallen .... 👍

L
LuckyStrike Themenstarter:in
168 Beiträge seit 2008
vor 15 Jahren

Danke euch, klappt super ...

X
1.177 Beiträge seit 2006
vor 15 Jahren

huhu,

Danke euch, klappt super ...

und? wie hast es jetzt gemacht?

@Kubi:

ja, bitte Tips nur mit Parametern geben, das ist auch in deinem Beispiel nicht schwer:


public OracleCommand MeineMethode(OracleCommand cmd, string[] meineVars)
{

    StringBuilder sb = new StringBuilder();
    sb.Append("Select * From Tab Where Kunde = :var0");
    cmd.Parameters.Add(":var0", meineVars[0]);

    for(int i = 1; i < meineVars.Lenght; i++)
    {        
        sb.Append(" OR Kunde = " + meineVars[i].ToString());
        cmd.Parameters.Add(":var" + i.ToString(), meineVars[i]);
    }

    cmd.CommandText =  sb.ToString();
    return cmd;
}

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

1.433 Beiträge seit 2006
vor 15 Jahren

By the way dass es sicher wird SQL-Injection

Für eine Query zusammenzustellen würde ich dann auf Sql Parameters zurückgreifen, dann hast Du oben erwähntes Probelm gleich erschlagen.

EDIT: Sorry hab jetzt gesehen dass es Oracle ist. Das gleiche wie für den SQL gibt es auch für Oracle.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt