Recherche sur le blog

mercredi 28 octobre 2015

[.NET] Accès à DB2 UDB iSeries + DataGridView

On retrouve dans .NET les mêmes possibilités qu'en Java afin de se connecter à une base de données DB2 UDB sur un AS/400. En effet, lorsqu'on installe IBM i Access sur le PC, un kit de développement est inclus. Dedans on retrouve les assemblages nécessaires pour développer en .NET. Dans le menu démarrer vous devriez retrouver, dans le dossier IBM i, l'aide "Boite à outils de programmation". 

Start Menu \ Programs \ IBM i Access for Windows \ Boîte à outils de programmation.

Intégrer l'assemblage dans le projet

Pour effectuer cette opération il faut ouvrir l'explorateur de solutions, effectuer un clic droit sur la catégorie "Références" et choisir l'option "Ajouter une référence" dans le menu contextuel.

    
Ensuite, il faut cliquer sur "Extensions" et chercher après "IBM for DB2 i .NET Provider". On peut s'aider du champ de recherche afin de filtrer les résultats. Une fois celui-ci repéré il faut le cocher puis cliquer sur OK.


Lorsqu'on a terminé, si on déroule l'arborescence, on pourra constater qu'un nouvel élément est venu rejoindre les références existantes, à savoir "IBM.Data.DB2.iSeries". On va dès lors pouvoir utiliser les différents objets de l'API.

Connexion et requête

Tout d'abord, il faudra indiquer, à l'aide de la directive "using", qu'on souhaite utiliser des objets et types de l'espace de noms "IBM.Data.DB2.iSeries" sans avoir à le qualifier à nouveau. Pour information nous programmons ici en C#.
using IBM.Data.DB2.iSeries;
Ensuite on va, dans le code d'un bouton par exemple, initialiser la connexion, récupérer des données dans une table, puis fermer cette connexion. On va aussi afficher le nom du job démarré sur la machine AS/400.

C'est en instanciant un objet de la classe "iDB2Connection" qu'on va pouvoir se connecter. Pour cela, on devra renseigner dans le paramètre du constructeur une chaine de connexion (ConnectionString). Pour savoir quelles sont les propriétés qu'on peut renseigner, consultez l'aide ou la documentation en ligne.
iDB2Connection cn2 = new iDB2Connection("DataSource=ADR_IP;"+ 
  "UserID=USER;Password=PASSWD;Naming=SQL");
cn2.Open();
Dans l'exemple ci-dessus, on a spécifié :
  • DataSource : le nom ou l'adresse du serveur à contacter.
  • UserID : le nom d'utilisateur avec lequel on veut se connecter.
  • Password : le mot de passe associé.
  • Naming : indique si on veut utiliser les conventions de nommage SQL.
Ensuite on a utilisé la fonction "Open()" de l'objet créé afin d'ouvrir explicitement la connexion. L'étape suivante consiste à créer une "commande" de type "select" qui sera liée à la connexion précédente.
iDB2Command myCmd = cn2.CreateCommand();
myCmd.CommandText = "SELECT * FROM myLib.myTable";
La propriété "CommandText" contiendra le code SQL de la requête à exécuter. On va remplir ce qu'on appelle un "DataGridView". C'est un contrôle personnalisable qui permet d'afficher assez facilement un tableau, lié à une source de données, ou non.
iDB2DataAdapter da = new iDB2DataAdapter(myCmd);
DataTable ds = new DataTable();
da.Fill(ds);
dataGridView1.DataSource = ds;
Pour cela on va utiliser deux autres types de variables, un "iDB2DataAdapter" et un "DataTable". Le second est une représentation des données de la table. Le premier quant à lui va servir de "pont" entre la base de données et notre objet "DataTable" en question.
  • On crée donc une instance de iDB2DataAdapter en passant en paramètre la commande.
  • On crée un objet DataTable, sans spécifier de paramètre au constructeur.
  • On utilise la fonctionne "Fill()" de notre objet iDB2DataAdapter avec en paramètre, l'objet DataTable
  • Ensuite on lie cet objet DataTable à notre contrôle grâce à la propriété DataSource.
  • Il n'y a rien à faire ; le tableau apparaitra automatiquement.
Voilà ce que ça donne à l'exécution.


Et bien sûr il ne faudra pas oublier de se déconnecter de la base de données une fois que c'est terminé (tout dépend de ce que vous souhaitez faire ensuite).

Afficher le nom du job

Si on veut afficher le nom du job qui a été créé pour la connexion en cours, on peut par exemple écrire le code suivant.
MessageBox.Show(cn2.JobName);
Cela affichera, dans une boite de dialogue, son nom complet (travail, utilisateur et numéro).

Déconnexion

C'est très simple ! Il suffit d'appeler la fonction "Close()" de l'objet Connexion créé au début de ce billet. Cela aura pour effet de mettre fin au job créé sur l'AS/400.

Aucun commentaire: