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.
Esecuzione del 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. Schermata gestione membri STRPDM

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.
Esecuzione del comando STRSEU

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.
Esecuzione del comando F4 nel tool SEU

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)