none
Oracle SQL-Abfrage mit Parameter RRS feed

  • Frage

  • Hallo!

    Ich möchte (das erste mal) ein TableAdapter, mit einer parametrisierten Abfrage, im VS-DatasetDesigner erstellen.

    Ich verwende (lt. MS-Anleitung) numerierte Parameter:

    SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
    FROM all_tab_columns 
    WHERE data_type like '%' + :1 + '%' and owner = 'WODIS'

    Aber es wird folgende Fehlermeldung angezeigt:

    Verwendeter ORACLE Client:

    Abfragen ohne Parameter mit diesem Client funktionieren.

    Was könnte ich denn verändern?

    Fred.


    • Bearbeitet perlfred Donnerstag, 15. September 2016 14:03
    Donnerstag, 15. September 2016 14:03

Alle Antworten

  • Hallo Fred,

    ich habe kein Oracle installiert, insofern aus dem Stegreif. Zum einen verhält sich der Oracle ODP Treiber anders als der Microsoft Oracle Client (veraltet). Verwenden sollte man den ODP Client wie Du es tust.

    OracleParameter können benannt werden, wenn man die BindByName Eigenschaft auf wahr setzt[1]. Im Falle einer Zeichenverkettung verwendet Oracle den Operator "||", woraus sich ergibt:

    SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
    FROM all_tab_columns 
    WHERE data_type LIKE '%' || :datatype || '%' AND owner = 'WODIS'

    wobei man alternativ die "%" bereits dem Parameterwert zuweisen kann (sollte); auch owner mag von einem Parameter profitieren.

    Gruß Elmar

    [1] ODP.NET Tip: Bind Variables, the BindByName Property, and PL/SQL Function Return Values


    Freitag, 16. September 2016 08:46
    Beantworter
  • Hallo Elmar!

    Danke für deine Antwort. Oracle scheint ja ein Schweitzer Taschenmesser zu sein :-)

    Aber meine Frage bezog sich auf den Visual Studio DataSet-Designer. In den Eigenschaften zum Select Command konnte ich keine BindByName-Eigenschaft finden:

    Im Moment wäre es mir (vorläufig [dein Hinweis ist trotzdem interessant!]) egal, ob ich den Parameter über den Namen oder über die Position anspreche, wenn irgend etwas funktionieren würde.

    Bemerkenswert ist trotzdem, dass ein Parameter in den Parametern des Select-Commands gebildet wird:

    (Und dieser auch auf die Spalte DATA_TYP verweist!!!)

    Im Moment setze ich den CommandText in der CodeBehind zusammen, aber so sollte es nicht bleiben ;-)

    Fred.


    • Bearbeitet perlfred Montag, 19. September 2016 08:39
    Montag, 19. September 2016 08:36
  • Hallo Fred,

    der Designer bildet nur die Daten ab, am Ende kommt Code dabei heraus, den man sich anzeigen lassen kann (Anzeige für alle Dateien aktivieren).

    Die BindByName Eigenschaft existiert auf OracleCommand Ebene. Wobei es nur eine Rolle spielt, wenn Du Bezeichnungen verwendest. ":1" wäre ein positioneller Parameter und da oben der einzige spielt die Reihenfolge keine Rolle.

    Oben ist der DbType "Object", was in den meisten Fällen verkehrt sein dürfte.

    Gruß Elmar

    Montag, 19. September 2016 09:49
    Beantworter