Laden...

Parameter für Select mit "IN" Bedingung

Erstellt von Feinfinger vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.091 Views
F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 16 Jahren
Parameter für Select mit "IN" Bedingung

verwendetes Datenbanksystem👍DBC Firebird

Ich arbeite mit typisierten Datasets und habe nun einem Tableadapter mit einer Select abfrage die eine über "IN" einen Parameter mit eine kommagetrennten Liste übergeben bekommt :
SELECT ID, IDENT, PCONF_ID, NOTES, LOV_STATUS, TYP_ID, CHANGED
FROM WORKFOLDERS
WHERE (PCONF_ID IN (?))

Den Parameter hab ich als String konfigurert aber ich bekomme keine Werte zurück wenn ich das Fill aufrufe, wenn ich aber das statement so direkt in dem
Datenbankeditor ausführe und die generierte Liste da einfüge funktioniert es.
Also liegt es daran wie der Parameter vom Visual Studio interpretiert wird aber ich hab keine Ahnung wie man ihn anders konfiguriern sollte !?

Keine Weltherrschaft ohne manisches Lachen!

476 Beiträge seit 2004
vor 16 Jahren

hallo Feinfinger,

ein ADO.NET Parameter repräsentiert immer einen Wert. Das hat nichts mit Visual Studio zu tun. Wenn du also eine kommagetrennte Liste übergibst, wird diese Liste auch als ein Wert behandelt.


... -- so wird's ausgeführt
WHERE (PCONF_ID IN ('Item1,Item2,Item3'))

... -- so hättest du es gerne gehabt.
WHERE (PCONF_ID IN ('Item1','Item2','Item3'))

Wenn du mehrere Werte parameteristiert Abfragen willst, kommst Du nicht umher für jeden Wert einen Parameter zu erzeugen und diesen mit Hilfe der ParameterCollection zu übergeben.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 16 Jahren

das Verhalten konnte ich auch beobachten bei mir also dann doch zu Fuß

           string InClause = "";
            foreach (DataRow R in DsMain.WORKTODOSTATUS)
            {
                InClause += R["ID"].ToString() + ",";
            }
            if (InClause != "" || Workstatus != "")
            {
                WorkTodostatus = InClause.Remove(InClause.Length - 1);
                string Sql = REP_SQL.sql_worknotes.Replace("%2", Workstatus);
                Sql = Sql.Replace("%1", WorkTodostatus);
                OdbcDataAdapter Adapter = new OdbcDataAdapter(Sql, MainCon);
                Adapter.Fill(DsMain.WORKNOTES);
                Adapter.Dispose();
            }[

Keine Weltherrschaft ohne manisches Lachen!