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.

mardi 27 octobre 2015

[VMWare] Un ransomware affecte les datastores

C'est l'histoire que relate Blogmotion. Plusieurs personnes auraient été victimes de ce ransomware bien particulier puisque visiblement cette variante s'amuse à télécharger et supprimer les machines virtuelles de votre infrastructure vCenter. Un fichier texte est alors stocké sur les datastores (voir sur Pastebin) : l'auteur - probablement russe d'après le pseudo utilisé - demande 5 bitcoins par VM à récupérer (soit environ 1250 €) et indique qu'un disque dur sera alors envoyé après réception du paiement. L'auteur ajoute qu'il est aussi possible de passer par un serveur FTP et réclame que la somme soit envoyée avant 2 semaines.


Les versions suivantes d'ESXi et vCenter sont touchées :
  • VMware ESXi 5.5 sans le patch ESXi550-201509101-SG.
  • VMware ESXi 5.1 sans le patch ESXi510-201510101-SG.
  • VMware ESXi 5.0 sans le patch ESXi500-201510101-SG.
  • vCenter Server 6.0 inférieur à 6.0.0b.
  • vCenter Server 5.5 inférieur à 5.5 update 3.
  • vCenter Server 5.1 inférieur à 5.1 update u3b.
  • vCenter Server 5.0 inférieur à 5.0 update u3e.
Il est donc recommandé de mettre à jour au plus vite et surtout d'éviter que vos hyperviseurs ne soient accessibles depuis internet. A consulter aussi : des mises à jour pour ESXi et vCenter sont disponibles afin de corriger des vulnérabilités (bulletin VMSA-2015-0007.2). Les premières victimes ont commencé à se manifester courant juin (également sur la communauté de VMWare).

jeudi 22 octobre 2015

[Linux] Envoyer un fichier à l'aide de PSCP

Si vous souhaitez envoyer rapidement un fichier sur un hôte Linux - depuis un PC Windows -, vous pouvez utiliser l'utilitaire PSCP (que l'on peut obtenir sur la page de téléchargements de Putty). Décompressez l'utilitaire dans le répertoire de votre choix, ensuite ouvrez une invite de commandes en administrateur et saisissez la commande suivante.
pscp.exe FICHIER.EXT UTILISATEUR@HOTE:REP/SUBREP
Vous devez bien sûr remplacer :
  • FICHIER : nom du fichier.
  • EXT : extension (s'il en possède une évidemment).
  • UTILISATEUR : nom d'utilisateur qui permet de se connecter à la machine.
  • HOTE : nom d'hôte de la machine Linux sur laquelle on veut envoyer.
  • REP/SUBREP : destination (peut dépendre de l'utilisateur).
Voici un exemple :
pscp mlocate-0.26-18.2.x86_64.rpm root@mach1:/home/ 
Il faudra alors accepter le certificat lors de la première connexion, et saisir le mot de passe de l'utilisateur. Une fois que l'on est identifié, la progression du transfert s'affiche à l'écran.