Collegamento con ADO.NET su sistemi AS400.
Sezioni.
01 - Premessa.
Questo articolo vuole essere una guida per chi deve costruire applicazioni
ADO.NET in grado di collegarsi a base di dati di tipo DBII su sistemi AS400.
Come primo passaggio illustrero' brevemente il sistema AS400 e la modalità piu'
veloce di creazione e gestione di base dati tipo DBII. Secondo passo l' analisi
dei due tipi di provider nativi IBM, forniti dalla stessa per la piena compatibilità con
ADO.NET. Infine verranno create due gestioni dati con i due provider.
Viene richieta una conoscenza di base di ADO.NET, VB.NET e del sistema AS400.
L' articolo é chiaramente destinato a sviluppatori NET che devono aggiornare o rimodernizzare sistemi
AS400, o che vogliono sviluppare applicazioni su sistemi paralleli mantenendo
la vecchia base dati.
Torna inizio pagina
02 - Accesso al sistema OS400 tramite Client Access IBM.
Il software fornito da IBM per la comunicazione con Windows si chiama Client Access. Non è compito di questo articolo spiegarne l' uitilizzo.
In circolazione ci sono due versioni, la 5.5 che fornisce il Provider OLE-DB
IBMDA400, e la 5.7 che oltre a questo Provider fornisce anche la nuova classe
per ADO.NET, IBM.DATA.DB2.iSeries. Le future e le possibilità offerte da questi
Provider di dati sono molte e in questo articolo verranno solamente accennate.
La comunicazione con un sistema AS400 puó essere
creata anche tramite telnet 5270.
Torna inizio pagina
03 - Il Sistema AS400 e le basi di dati DBII.
Il sistema AS400 viene distrubuito dalla IBM, e detto Green Screen per
la sua caratteristica visualizzazione a schermo nero con scritte verdi. è
un sistema a riga di comando, non esiste una gestione del GDI e non
consente una programmazione nativa di tipo OOP. Il Linguaggio di programmazione
nativo è l' RPG, ma è possibile sviluppare anche in Java (senza Swing), Perl,
C++ e CGI. L' IFS è molto piu' semplice di quello Windows, esistono le librerie (Folders),
i file (programmi, sorgenti, comandi, database ...) e i file descrittivi che
vengono associati ai singoli file sorgenti per specificarne il tipo (database,
prg ...) in fase di compilazione.
Per questo articolo vengono usati due tools nativi dell' S.O. OS400,
il PDM e il SEU; due tipi di file, il file di database,
chiamato PF Physical File e il file descrittivo chiamato QDDSPF.
Per avviare un tool su sistemi AS400, basta inseirire la stringa STR (start) prima
del nome del tool, in questo caso PDM, quindi STRPDM.
Nelle figure che seguono le 3 fasi per avere accesso al tool PDM.
Schermata ottenuta dal comando STRPDM.
Da qui scegliamo 3, bisogna creare il file QDDSPF per poter gestire
i database.
Schermata interna del PDM con elencati i file esistenti.
Con il comando F6 potete creare sia il file QDDSPF che il file di
database TBL01; anche se molto probabilmente nel sistema che dovrete
usare sono già presenti entrambe le cose.
Infine per poter creare le fields del nostro DB dobbiamo usare l' ultimo
tool, il SEU. Il SEU non è altro che un semplice editor green screen
a colonne (la sintassi è legata al numero di caratteri), usato sia per l'
editazione di file di datbase, che di programmi e report. Il comando STRSEU avvia
l' editor. è consigliabile, una volta digitato un comando, premere F4 per
poter scegliere la libreria e il nome del file da creare o editare.
Schermata del tool SEU.
Ultimo passaggio la creazione del file a codice. Di seguito potete trovare
la struttura da seguire per la creazione del file di esempio.
Se si preme F4 sulle righe dell' editor, compare una schermata che facilita
la creazione delle righe.
Con F1 l' help di quella deerminata colonna dove il cursore è posizionato.
Schermata del tool SEU con F4.
Torna inizio pagina
Descrizione colonne.
Nome Tipo - Inserire A per una riga che descrive il record. K per la descrizione
di un campo chiave.
Nome - Il nome del record.
Lunghezza - la lunghezza del campo se stringa o numero. (Nota : per un
campo numero decimale, con 3 cifre, due saranno usate per le cifre dopo lavirgola...)
Tipo - '' per stringa, S per numero.
Posiz. Dec. - quante cifre decimali, se 0 Intero.
Funzioni - quisi possono inserire funzioni per le fields, nell'
esempio viene usata TEXT che serve per inserie una descrizone del campo.
Torna inizio pagina
Il file customer (TBL01).
001.00 A UNIQUE
002.00 A ID 3S TEXT('ID univoco')
003.00 A NAME 20 TEXT('Name customer')
004.00 A SUR 20 TEXT('Surname customer')
005.00 A ADDR 50 TEXT('Address customer')
006.00 A ZIP 8S TEXT('Zip customer')
007.00 A STATE 10 TEXT('State customer')
008.00 K ID
009.00 K NAME
010.00 K SUR
UNIQUE per avere records unici indicizzati. K sono le tre fields chiave
per il record.
Non resta che avviare il PDM e compilare il
file creato con il comando 14.
Il file dell' articolo si chiama TBL01, nella libreria TEST.
Note su DBII.
La struttura dei Database di tipo DBII é molto più semplice di
quella di un Database moderno, questo perchè nel sistema OS400 esiste
una gestione dei dati complessa come in Windows.
I tipi di dati sono principalmente 2 : numerico e stringa (alfanumerico).
Non esistono Join espliciti, per ogni file si assegnano 1 o più campi chiave, nelle query si chiama
la relazione con la seguente sintassi :
SELECT * FROM MYLIB.TBL01, MYLIB.TBL02
WHERE TBL01.ID = TBL02.ID, ...
La sintassi SQL per alcuni comandi, lavora in maniera diversa da SQL Server,
ma per questi dettagli vi rimando alle
References
di questo articolo.
Torna inizio pagina
04 - IBMDA400
Il Provider di dati IBMDA400 viene fornito sin dalla versione 5.1 di Client Access. Oltre a questo Provider, viene fornito anche l' ODBC
che io personalmente considero deprecated and obsolete.
Per ottenere questo Provider basta aver installato sul proprio PC una versione di Client Access, e chiaramente avere una references
nel proprio progetto NET.
Nell' esempio che segue, la macchina si chiama AS400, in un dominio win2003 CN=myfactory.com, la libreria si chiama MYLIB e i file
TBL001 .... Con queste direttive costruiamo una classica connessione ADO.NET di tipo OLEDBConnection.
Imports System.Data
Imports System.Data.OleDb
Public Class myClass
Dim CN As New OleDbConnection
Private Sub createConnection()
With CN
.ConnectionString = "DataSource=AS400;"
End With
End Sub
End Class
In questo caso abbiamo creato una semplice connessione, senza specificare UserName
o Libreria. Una connessione di questo tipo é utile
quando il programma da realizzare sarà destinato a più utenti con
autorità diverse sui file. Ad ogni apertura della connessione il Provider visualizzerà
una finestra modale che richiede UserName e Password per connettersi al
sistema AS400.
Ora vediamo cosa possiamo specificare in una connessione :
... ...
.ConnectionString = "DataSource=AS400.myfactory.com; " & _
"UserID=US; Password=***" & _
"ConnectionTimeOut=60;"& _
"SSL=True;"& _
A questo punto non ci resta che creare un
lettore. Siccome la lettura dei dati su AS400 avviene sempre in remoto, consiglio
vivamente l' utilizzo di
transaction e di
Dataset scollegati.
Leggiamo la nostra tabella TBL001 nella libreria MYLIB.
Imports System.Data
Imports System.Data.OleDb
Public Class myClass
'Dichiarazione Connessione visibile alla classe
Private CN As OleDbConnection()
Private DA as OleDbDataAdapter()
Private DS as Dataset()
'metodo per connettersi
Private Sub createConnection()
'creazione connessione
With CN
.ConnectionString = "Provider=IBMDA400;DataSource=AS400; UserID=US; Password=***;"
End With
Try
CN.Open()
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
End Sub
'metodo per leggere i dati
Private Sub readData()
'creazione Comando Select
Dim CMD as New OleDbCommand
DA.SelectCommand = CMD
CMD.CommandText = "SELECT * FROM MYLIB.TBL001;"
CMD.Connection = CN
'ricezione dati
DA.Fill(DS, "TBL001")
'chiusura connessione
If CN.State <> ConnectionState.Closed Then
CN.Close()
End If
End Sub
End Class
Con la stessa modalità potete creare i comandi UPDATE, INSERT e DELETE.
Torna inizio pagina
05 - IBM.Data.DB2.iSeries.
Questo Provider vienedistribuito solamente con l' ultima release di Client Access V 5.7. Un Provider studiato appositamente per ADO.NET,quindi
un Provider che supporta pienamente il 90% delle operazioni che si possono effettuare con ADO.NET.
Il Codice per la connessione é identico a quello del provider IBMDA400, ma al contrario di usare un OLEDBConnection generica, qui
usiamo la iDB2Connection.
Per ottenere questo Provider dobbiamo installare Client Access 5.7 e selezionare Provider .NET, in modo da inserire tra i nostri Assembly
anche quello IBM. A questo punto basterà aggiungere una Reference all' assembly IBM DB2 UDB for iSeries ....
Il codice non cambia di molto :
Imports IBM.Data.DB2.iSerie
Dim Cn as New iDB2Connection
Cn.ConnectionString = "..."
Dim CMD as iDB2Command
Risulta ovvio e chiaro che questo Provider costituisce un nuovo supporto, completo e affidabile, per poter migrare
completamente le
nostre applicazioni, mantenedo i dati e le basi di dati vecchie.
Torna inizio pagina
06 - Esecuzione di comandi remoti.
Quest' ultimo argomento é particolarmente utile, quando ad esempio, sul sistema AS400 sul quale dobbiamo lavorare, devono essere comunque
eseguiti dei programmi o dei comandi che non possono essere sviluppati in NET o che sono troppo obsoleti per poter essere convertiti.
Ad esempio : ogni volta che un file di database viene resettato bisogna poi compattare il file stesso, un pò come con Access.
Per fare ciò bisogna eseguire il comando RGZPFM FILE(MYLIB/MYFILE), ovvero Riorganize Physical File.
A Codice :
IBMDA400
Dim CN as OleDbConnection
CN.ConnectionString ...
CN.Execute ("{{RGZPFM FILE(MYLIB/MYFILE)}}")
iDB2.iSeries
Dim CN as iDB2Connection
Dim CMD as iDB2Command("RGZPFM FILE(MYLIB/MYFILE", CN)
CMD.Dispose()
Torna inizio pagina
References and Notes.
Il sistema AS400 é un mondo a sé, in questo articolo avete visto solamente una piccolissima parte di quello che si può
fare con questi Provider di dati e con i DBII. L' idea é quella di indirizzarvi sull' utilizzo di ADO.NET per lo sviluppo di apllicazioni
parallele tra sistemi Windows e IBM, senza doversi limitare alle poche potenzialità degli ODBC.
Sicuramente l' argomento verrà affrontato nuovamente, magari analizzando singoli casi operativi.
Client Access : Download
IBM : Web support
IBM Press : Redbooks
Autore : Raffaele Garofalo (email)