[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    79

    CL-Programm aus C# mit Rückgabeparameter aufrufen

    Hallo zusammen,
    meine Suche blieb bisher ergebnislos.
    Ich möchte ein CL über IBM.Data.DB2.iSeries mit 3 Parametern aufrufen.
    1 = Input dec(5, 0)
    2 = Input dec(3, 0)
    3 = Input/Output char(3)
    Das CL ist nicht als "Stored Procedur" registriert.
    Dieser Aufruf funktioniert.
    myCommand.CommandText = "CALL MYLIB.MYPGM(x'12345f', x'123f', 'ABC')";


    Jeder Versuch den 3. Parameter variabel zu gestalten um den Rückgabewert zu erhalten schlägt fehl.

    _cmd.CommandText = "CALL AM.WSUEBBUC(@PACODE)";
    iDB2Parameter PACODE = newiDB2Parameter();
    PACODE.ParameterName = "@PACODE";
    PACODE.Value = "BAT";
    PACODE.DbType = DbType.String;
    PACODE.Direction = ParameterDirection.InputOutput;
    PACODE.Size = 3;
    _cmd.Parameters.Add(PACODE);

    Hilfe !!!!!!!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist leider korrekt. Parametermarker funktionieren nur mit registrierten Prozeduren/Funktionen.
    Was hindert dich denn, die Prozeduren als Extern einfach zu deklarieren?
    Alternativ kannst du eben alle Programme direkt mit den Werten aufrufen, d.h., das CMD immer zusammen zu stricken. Am Besten klappt das mit String.Format, da du hier die Zahlen auch mit Vornullen aufbereiten kannst.

    Eine Hex-Übergabe ist i.Ü. nicht erforderlich, da Zahlen automatisch in das passende Decimal übersetzt werden (daher mit Vor- und Endnullen).
    Z.B.:
    0012,34 => dec(6, 2)
    00012345 => dec(8, 0)
    usw.
    Zeichenketten werden genauso lang übergeben wie die Konstante ist. Leerzeichen am Ende werden also gebraucht wenn das Empfangsfeld z.B. 20 Zeichen groß ist, dann sind 20 Zeichen zu übergeben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    79
    Besten Dank Herr Fuerchau. Ich hab es mir gedacht.
    Mein Problem ist aber nicht die Übergabe an das CL. Ich muss wissen ob das CL (mit RPG-Call) seine Arbeit verrichtet hat oder nicht. Wenn nicht, dürfen im C# Textfiles nicht verändert werden. Ich hatte da an einen Rückgabewert "OK" gedacht.
    Zum anderen gibt es eine Anleitung für eine "Stored Procedur"?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ja, das SQL-Handbuch (SQL-Reference).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... da schmeißt man eh' am Besten eine Exception (CPF9898 oder eigene als Abbruchnachricht senden), das dürfte auch der C-Knast mitbekommen...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das funktioniert leider nur bedingt.
    Der SQL-Serverjob (QZDASOINIT) muss dann auf automatische Beantwortung von Fehlermeldungen gestellt sein sonst steht der Job auf MSGW.
    Der Default steht auf *DFT. Ich habe da schlechte Erfahrungen gemacht.
    Das CLP könnte natürlich den Jobwert ändern, aber auf grund der Wiederverwendung von QZDA-Jobs könnte das dann stören.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    79
    Besten Dank für Eure Hilfe.
    Die Abbruchnachricht mit SNDPGMMSG im CL funktionierte ohne etwas umstellen zu müssen. Mein Problem ist damit gelöst. Ich bin begeistert :-)
    Allerdings finde ich es schwach von IBM die Rückgabeparameter, die es in der Microsoft ActiveX Data Objects x.x Library seit Ewigkeiten gibt, nicht zu implementieren. Könnte man ggf. hier komplett auf die IBM.Data.DB2.iSeries.dll verzichten und statt dessen die ActiveX Data Objects Library als COM-Objekt einbinden? Nach meiner Recherche sollte das funktionieren. Leider stieß ich nicht auf den Code für parametrisierten Programmaufruf.
    Damit wäre auch die Registrierung als SQL Stored Procedur unnötig.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Es liegt nicht an der IBM sondern an deiner fehlenden Deklaration einer Prozedur/Funktion.
    Woher soll die DB denn den Typ (IN/OUT/INOUT) selbständig erkennen?
    Bei anderen DB's kann man ohne Deklaration von prozeduren gar ncihts aufrufen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    79
    Ohne ein umfassendes Beispiel komme ich hier vorerst nicht weiter.
    Warum aber dann ActiveX ohne die SQL-Registrierung auskommt ist mir schleierhaft. Aktuell erscheint mir dieses Thema sehr undurchsichtig. Aber besten Dank ...

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das sind nun 2 ganz verschiedene Dinge!
    ActiveX:
    Hier werden dir nur Möglichkeiten der Programmaufrufe gegeben.
    Die Parameter legst du selber zur Laufzeit fest und zwar unabhängig davon, ob sie zum Programm passen oder nicht. Wenn die Parameter dann falsch sind hast du Pech gehabt.
    Du kannst sowohl Einzelparameter als auch Strukturen definieren. Und für die Umwandlung ASCII/EBCDIC bist du auch noch selber verantwortlich.

    SQL:
    Der Standard verlangt explizite Deklarationen von Prozeduren und Funktionen.
    Die SQL-Runtime prüft nun sogar ob die übergebenen Parameter zur Deklaration passt oder ggf. auch konvertierbar sind.
    Durch sog. "Überladung" kann ich den selben Namen mit anderen Parametertypen mehrfach verwenden. SQL erkennt und findet den richtigen Aufruf.
    Da die IBM nun mal die Faulheit der AS/400-Programmierer kennt hat sie einen vereinfachten Aufruf ermöglicht, der mit dem Standard aber auch gar nichts zu tun hat.
    Hier kann man also ebenso Programme aufrufen. Allerdings sind hier nur einfache Parameter (gepackte Dezimale und Zeichen) erlaubt da durch den Text das Format bestimmt wird.
    Also eine schöne aber eine absolut unsichere und gefährliche Sache.
    Vorteil der Deklaration ist aber z.B. bei Funktionen die Verwendung in fast jedem SQL, was du bei ActiveX eben nicht kannst.

    Beispiele findest du genug in den Handbüchern und im Forum.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Sep 2005
    Beiträge
    79
    Vielen Dank für die Bemühung. Gibt es einen Befehl, der zeigt welche UDF in einer Bibliothek registriert wurde, bzw. wie eine Registrierung entfernt wird?

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    select * from sysprocs <= Prozeduren, SYSFUNCS = Funktionen
    where SPECIFIC_SCHEMA = 'MYLIB' <= kann man ja auch weglassen

    drop procedure xxxx
    drop function xxxx
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Antworten: 2
    Letzter Beitrag: 19-02-16, 10:01
  2. Wie kann man über SQL ein I5-Programm aufrufen
    By MR-BN in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 02-10-15, 15:40
  3. Rückgabeparameter bei SBMRMTCMD
    By harkne in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 13-11-14, 12:56
  4. ILE aus /36 aufrufen
    By Norbertf in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-10-14, 20:32
  5. Batch-Programm aus RPG aufrufen?
    By hansr in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-11-02, 16:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •