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 |