-
call RPG mit Parametern aus VB.NET
Hallo liebes Forum,
was unter VBA wunderbar funktioniert wird der Horror in .NET.
Dim AS400 As New ADODB.Connection
Dim Programm As New ADODB.Command
Dim Rcds As Long
Dim Parm() As Object
AS400.Open("Provider=IBMDA400;Data Source=AS400;")
Programm.ActiveConnection = AS400
Programm.CommandText = "{{CALL /QSYS.LIB/AM.LIB/FEBDEBUC.PGM(?)}}"
Programm.Prepared = True
Programm.Parameters.Append(Programm.CreateParamete r("Funktion", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInputOutput, 5))
Parm(0) = "Write"
Programm.Execute(Rcds, Parm, ADODB.CommandTypeEnum.adCmdText)
AS400.Close()
Beim Append gibt es diesen Laufzeitfehler:
Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Klassentyp "ADODB.InternalParameter" umgewandelt werden. Instanzen von Typen, die COM-Komponenten repräsentieren, können nicht in andere Typen umgewandelt werden, die keine COM-Komponenten repräsentieren. Eine Umwandlung in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.
Bitte Hilfe...
PS: Wird damit auch ein geänderter Parameterwert zurückgegeben?
-
Du solltest hierfür auch nicht mehr ADODB als COM verwenden sondern ADO.NET!
Da gibt es auch native OLEDB-Treiber, sodass du den IBMDA400 weiter verwenden kannst.
Zu .NET kannst du ggf. noch per Typecast das Ergebnis anpassen:
.append(directcast(...CreateParameter(..), Object)
Ich weiß aber nicht, ob das funktioniert.
-
Besten Dank für die rasche Antwort.
Aber als .NET-Neuling benötige ich Details.
Unter Verweise-COM hab ich verlinkt:
Microsoft ActiveX Data Objects 2.8 Library
Unter .NET kann nichts vergleichbares finden?!
Sollte der Programmcode ansonsten korrekt sein?
-
ADO.NET ist kein COM-Objekt, die Verweise können z.T. in den Projekteigenschaften oder als Import verwendet werden.
Im Wesentlichen könnte das so aussehen:
Imports System.Data
Imports System.Data.OleDb
Module Module1
Sub Main()
Dim xConnection = New OleDbConnection("Provider=IBMDA400;Data Source=VWWE400;")
Dim xCommand = xConnection.CreateCommand()
xCommand.CommandText = "{{CALL /QSYS.LIB/AM.LIB/FEBDEBUC.PGM(?)}}"
xCommand.Parameters.Add("Funktion", OleDbType.Char, 5).Direction = ParameterDirection.InputOutput
Try
xConnection.Open()
xCommand.Parameters(0).Value = "Write"
xCommand.ExecuteNonQuery()
xConnection.Close()
Catch ex As Exception
Trace.WriteLine("Fehler in der Ausführung: " & ex.Message)
Finally
If xConnection.State = ConnectionState.Open Then
xConnection.Close()
End If
xCommand.Dispose()
xConnection.Dispose()
End Try
End Sub
End Module
-
Danke Hr. Fuerchau,
mit dieser Hilfe lässt sich experimentieren.
Und doch gibt es ein neues Problem.
Bei Ausführung wurde ich nach der Anmeldung gefragt. Ich wählte den Windows-Benutzernamen.
Dann die Fehlermeldung CWBC01004 Auflösung der fernen Adresse nicht möglich!
Eine Ausnahme (erste Chance) des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Fehler in der Ausführung: CWBCO1004 - Auflösung der fernen Adresse nicht möglich.
Es funktioniert der Ping, auch über die Namensauflösung. Es funktioniert der OPSNAV.
Bitte nochmal ...
-
Nun ja, wie du in meinem Code siehst, habe ich den Datasource-Namen geändert (auf mein verfügbares System), hier solltest du natürlich DEINE Datasource analog zu ADODB angeben .
-
Manchmal muss man das ganze einfach mal liegen lassen. Am nächsten Morgen kam ich dann auch drauf. War an sich wirklich offensichtlich!
Trotzdem nochmals viiiielen Dank - es funktioniert.
Da hab ich noch eine Frage:
Wie händelt ihr Updates auf der DB2?
Ich denk da auch an Satzsperren. Im RPG hab ich ein Modul, das aufzeigt wer sperrt mit der Möglichkeit eine Break-Msg zu senden.
Lest ihr direkt über SQL oder ist es besser über ein RPG-Programm? Wie sieht es mit der Wartung dann aus? (neue oder geänderte Satzfelder?)
Übergabe als Datenstruktur? Geht das hier? Oder als Array vom Typ Variant?
Ein solcher übersichtlicher Beispielcode ist einfach perfekt.
-
Remote arbeitet man mit SQL, ins besonders bei .NET (auch Java).
Hier empfehle ich mal Literatur "Visual Basic 2010 von Klaus Löffelmann, 49,00 Euro", da wird auch u.a. auf ADO.NET (gibts aber auch als eigenes Buch) eingegangen.
Satzsperren ist immer ein Problem, deshalb löst man das in .NET ganz anders.
Da man mit SQL arbeitet und ggf. ja nicht die selben Felder geändert werden, wird das Problem damit kleiner.
Allerdings ist die Gefahr dann groß, wenn man eben mit RPG-Programmen mischt.
Da RPG ja immer den gesamten Satz liest und alle Felder dann updatet funktioniert das halt nicht immer wie gewünscht, da vorherige Updates dann zerstört werden.
Zumal die "logischen" Satzsperren dann hier ein Problem darstellen.
Diese Verfahren sind bei ODBC-Zugriffen sehr aufwändig da sie erheblich mehr Zugriffe erfordern und im Absturzverhalten mehr Recovery erfordern.
Im Handbuch ist beschrieben, wie man mit DataTable's und DataAdapater's arbeitet, die zumindest das Problem des konkurierenden Updates verhindern, eine Lösung muss dann allerdings immer noch überlegt werden.
Zusätzlich wäre bei SQL dann Journalisierung auf jeden Fall der bessere Weg um im Falle des konkurierenden Updates z.B. einen Rollback durchzuführen.
Neue Felder sind bei SQL gar kein Problem da sie bei alten Programmen ignoriert werden (ausser bei Select *, was aber kein Problem ist).
Feldänderungen sind dann Zulässig, wenn die Art nicht geändert sondern nur die Ausprägung (Anzahl Stellen) geändert wird, da .NET (wenn keine expliziten Einschränkungen wie Eingabelänhge, programmiert sind) mit beliebigen Felder umgehen kann.
Ich kann das oben genannte Buch nur empfehlen.
Similar Threads
-
By Michael Rude in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 09-11-11, 14:10
-
By padawan in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 28-06-10, 16:38
-
By harkne in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 01-06-06, 12:42
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-08-05, 15:12
-
By hs in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 09-10-01, 12:06
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks