Dans un article précédent nous avons vu comment était réalisée la connexion à une base de données Oracle en Cobol. Nous allons maintenant voir qu’il est possible de réaliser la même chose mais sur une base de données Microsoft SQL Server. La différence avec Oracle est minime, elle se limite à la déclaration de la variable contenant l’identifiant de connexion.
Nous utiliserons toujours SQLCA pour interagir avec la base de données et tester les codes retours pour traiter les éventuelles erreurs.
EXEC SQL INCLUDE SQLCA END-EXEC. |
Variables nécessaires à la connexion
Pour réaliser cette connexion, l’identifiant et le mot de passe sont renseignés dans une unique variable utilisée par la fonction CONNECT. Nous allons devoir passer par une variable intermédiaire Cobol classique qui sera découpé en 3 parties :
- Identifiant de connexion
- Séparateur
- Mot de passe
Cette variable servira à alimenter la variable SQL. Le séparateur indique la limite entre l’identifiant et le mot de passe.
01 MSSQL-LOGIN. 10 MSSQL-USER PICTURE X(08). 10 FILLER PICTURE X(01) VALUE ".". 10 MSSQL-PASS PICTURE X(08). |
On déclare ensuite les variables SQL nécessaires qui sont une chaîne de caractère reprenant l’identifiant de connexion et le nom de la base de données à laquelle on souhaite se connecter. On va déclarer une variable supplémentaire pour modifier les propriétés de la session ouverte. Pour faciliter la relecture du programme, on va utiliser le préfixe Z- pour les variables SQL.
EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01 Z-SERVER PICTURE X(10). 01 Z-LOGIN PICTURE X(17). 01 Z-SQLOPT PICTURE X(90). EXEC SQL END DECLARE SECTION END-EXEC. |
Demande de connexion à SQL Server
Dans cet exemple on va alimenter directement les identifiants de connexion en dur dans le code. Bien sur cette partie devra être remplacée par la lecture d’un fichier paramètre qui n’oblige pas à la recompilation de l’application si les codes sont amenés à changer.
MOVE "MSUSER" TO MSSQL-USER. MOVE "MSPASS" TO MSSQL-PASS. |
On replace maintenant le contenu de la zone groupe MSSQL-LOGIN dans la variable Z-LOGIN et on alimente le nom du serveur auquel on souhaite se connecter.
MOVE MSSQL-LOGIN TO Z-LOGIN. MOVE "SERVEUR" TO Z-SERVER. EXEC SQL CONNECT TO :Z-SERVER USER :Z-LOGIN END-EXEC. |
Modification des propriétés de la session
Maintenant que la connexion à SQL Server est faite, on va modifier les propriétés de la session. On va pour cela utiliser la variable banalisée Z-SQLOPT déclarée en working.
Définir un format de date par défaut
On va commencer par utiliser les dates au format YYYY-MM-DD. L’avantage de ce format est de pouvoir comparer les dates comme des chaînes de caractères.
MOVE "SET DATEFORMAT YMD" TO Z-SQLOPT. EXEC SQL EXECUTE IMMEDIATE :Z-SQLOPT END-EXEC. |
Désactiver les transactions implicites
Afin de pas gérer les COMMIT et ROLLBACK pour valider un ensemble de requêtes, on va désactiver les transactions implicites. Ainsi les mises à jour des données seront prises en compte immédiatement.
MOVE "SET IMPLICIT_TRANSACTIONS OFF" TO Z-SQLOPT. EXEC SQL EXECUTE IMMEDIATE :Z-SQLOPT END-EXEC. |
La gestion des erreurs n’a pas été abordé ici, il convient bien sur de tester que toutes les commandes envoyées à la base de données se sont déroulées sans erreurs.