DOCUMENTATION NTi

Classe NTiConnection

Description

La classe NTiConnection représente la connexion à l'IBM i et implémente la classe DbConnection du modèle ADO.NET (espace de noms System.Data.Common).

Considérations générales

Pool de connexion

À partir de la version 3.2.3, NTi implémente un pool de connexion basé sur .NET, assurant un suivi rigoureux des connexions ouvertes et évitant la création excessive de jobs QZDASOINIT.

L’ouverture d’une connexion à l’IBM i entraîne plusieurs opérations coûteuses : résolution de l’IP, négociation TCP, authentification, création d’un job sur IBM i. Répéter ces opérations à chaque requête impacte significativement les performances.

Le pooling NTi fonctionne ainsi :

  • Lorsqu'une connexion est demandée, NTi cherche d'abord une connexion disponible dans le pool. Si une connexion est disponible, elle est réutilisée immédiatement, sinon une nouvelle connexion est créée et ajoutée au pool.
  • Lorsque la connexion n’est plus utilisée, elle est remise dans le pool au lieu d’être fermée.
  • Quand l’application s’arrête ou que le pool est détruit, toutes les connexions sont correctement fermées.

Le pooling est activé par défaut à partir de NTi 3.2.3. Il peut être désactivé si un contrôle manuel des connexions est requis.

💡 Bénéfices observés : réduction du temps de réponse de 80ms à 6ms, soit un gain de plus de 10x dans certains cas d’usage (notamment avec Entity Framework Core).

Une instance = une connexion TCP = un travail IBM i

Chaque instance de NTiConnection porte une instance de socket TCP pour se connecter à l'IBM i. Ainsi il y a un lien fort entre l'instance, la connexion et le job IBM i.

Lorsqu'une instance de NTiConnection est détruite explicitement via le Garbage Collector de .NET, la connexion TCP sous-jacente est instantanément fermée et détruite à son tour, entraînant l'arrêt du job IBM i. Ce mécanisme garantit la maîtrise totale des connexions par l'utilisateur.

Chaîne de connexion

Comme la plupart des fournisseurs d'accès à une base de données, NTi utilise une chaîne de connexion pour obtenir les informations de connexion à un IBM i (nom d'utilisateur, mot de passe, etc...). Cette chaîne de connexion peut contenir des informations sensibles. Il existe de nombreuses méthodes pour sécuriser la gestion de la chaîne de connexion et des fichiers de configuration.

Référez-vous aux documentations et recommandations officielles de .NET pour leur mise en œuvre.

Implémentation ADO.NET

Cette classe implémente les méthodes et propriétés usuelles du modèle ADO.NET pour réaliser les opérations d'accès à la base de données, dont notamment:

  • Open()
  • Close()
  • CreateCommand()
  • BeginTransaction()
  • Commit()
  • Rollback()

Ainsi, NTi s'intègre dans n'importe quelle application existante développée avec d'autres fournisseurs tels que les pilotes ODBC ou OleDB.

💡 Retrouvez la documentation de cette implémentation par défaut sur toute documentation ADO.NET, par exemple via la documentation de l'espace de noms System.Data.Common.

Méthodes

La classe NTiConnection implémente en plus des fonctionnalités du modèle ADO.NET des méthodes spécifiques à l'utilisation de l'IBM i pour notamment exécuter des commandes CL et appeler des programmes RPG, CL...

Ces méthodes spécifiques sont:

Méthode Description
ChangeDatabase(string database) Définit la bibliothèque courante pour la session de base de données
ExecuteClCommand(string command) Exécute la commande CL fournie dans le paramètre command
CallProgram(string library, string program) Exécute le programme program de la bibliothèque library.
CallProgram(string library, string program, List<NTiProgramParameter> parameters) Exécute le programme program de la bibliothèque library avec passage des paramètres paramaters.

Propriétés

Les propriétés spécifique de la classe NTiConnection permettent de définir les propriétés de connexion et accéder aux informations relatives à l'état de la connexion à l'IBM i. Par souci de compatibilité avec les chaînes de connexion des autres fournisseurs, certaines propriétés peuvent correspondre à plusieurs mot-clés différents.

Propriété Mot-clé dans la chaîne de connexion Type Description
Server server
ou system
ou dsn
ou host
ou datasource
ou data source
string Adresse IP ou nom de domaine de l'IBM i sur le réseau
Username user
ou user id
ou userid
ou uid
string Nom d'utilisateur du compte IBM i
Password password
ou pwd
string Mot de passe du compte IBM i
Pooling pool
ou pooled
ou connection pooling
ou connection pool
bool Active (true) ou désactive (false) le pooling de connexion.
Activé par défaut (true).
PoolSize poolsize int Nombre maximal de connexions conservées dans le pool.
DefaultDatabase schema
ou default database
ou database
string Bibliothèque IBM i par défaut (base de données uniquement)
UseSSL ssl
ou tls
ou use ssl
ou use tls
bool Utilisation d'une connexion chiffrée SSL/TLS
Untrusted untrusted bool Forcer l'utilisation de SSL même en cas d'erreur lors de la vérification de certificat
SignonPort signon port short Port relatif au service de Signon (QZDASOSIGN)
DatabasePort database port string Port relatif au service de base de données (QZDASOINIT)
CommandPort command port string Port relatif au service de commandes et programmes (QZRCSRVS)
MapperPort mapper port string Port relatif au service de mappage de port (449 par défaut)
UseDefaultPorts use default ports bool Utilisation ou non des ports par défaut
UsePortsMapper use port mapper bool Utilisation ou non du service de mappage de ports. Activez cette fonctionnalité lorsque les numéros de ports des différents services sont susceptibles de changer dans le temps
LicenseLibrary license library string Bibliothèque de licence à utiliser. Par défaut la bibliothèque KNTI est utilisée
BlockingFactor blocking factor
ou blockingfactor
ou blocking
string Nombre d'enregistrements à précharger lors de la récupération d'un résultat
ForceTranslate force translate int CCSID à utiliser pour forcer la traduction des données binaires en texte (BINARY => CHAR, VARBINARY => VARCHAR, BLOB => CLOB)
NamingConvention naming convention
ou naming
int Convention de nommage des requêtes SQL. Valeurs possibles:
- 0 Nommage *SQL (par défaut)
- 1 Nommage *SYS
ConnectionString string Chaîne de connexion utilisée pour définir les paramètres de connexion avant l'établissement de la connexion. Les mots clés disponibles sont disponibles dans cet article.
Messages string lecture seule
ServerVersion string lecture seule Version de l'OS IBM i cible
LobMaxSize lob threshold string Seuil de taille en octets d'utilisation des pointeurs pour la récupération des champs de type LOB (de 0 à 2000000)
RetreiveSuccessMessages bool Récupération ou non des messages de succès détaillés dans la propriété Messages
DataSource string Nom de la base de données relationnelle de l'IBM i cible
DecFloatRoundMode roundoption
ou round option
NTiRoundOption (enum) Mode d'arrondi des nombres DECFLOAT à plus de 34 chiffres significatifs:
- HalfEven Arrondi au digit le plus proche, au digit pair le plus proche si égalité
- HalfUp Arrondi au digit le plus proche, à l'excès si égalité
- Down Troncature
- Ceiling Arrondi vers +infini
- Floor arrondi vers -infini
- HalfDown Arrondi au digit le plus proche, troncature si égalité
- Up Arrondi à l'excès
ApplicationName application name
ou applicationname
string Nom de l'application cliente.
ClientAccounting client accounting
ou clientaccounting
string Identifiant comptable client.
ClientUserIdentifier client user identifier string Identifiant utilisateur final.
ClientProgramIdentifier client program identifier string Identifiant du programme client.
Compress compress
ou use compression
bool Active (true) ou désactive (false) la compression des flux réseau pour réduire la bande passante utilisée.
TrimCharFields trim bool Active (true) ou désactive (false) la suppression automatique des espaces en fin de chaînes