Dans les exemples qui suivent, une base de données est activée pour la prise en charge des données de type image, via l'espace table par défaut.
Utilisation de l'interface API : Le code représenté à la permet d'établir une connexion à une base de données avant de l'activer. Cet exemple met en oeuvre l'interface DB2 CLI. Il comprend du code de configuration et de vérification des erreurs. Le modèle de programme complet se trouve dans le fichier ENABLE.C du sous-répertoire SAMPLES.
Figure 10. Modèle de code permettant d'activer une base de données
/*---- Configuration ------------------------------------------*/ #include <stdio.h> #include <stlib.h> #include <string.h> #include "dmbimage.h" /* prototypes de fonctions d'extension image (DBi) */ #include "utility.h" /* utilitaires */ #define MMDB_ERROR_MSG_TEXT_LEN 1000 #define SERVER_IS_DB2390 (strcmp(dbms, "DB2")==0 || strcmp(dmbs, "DSN06010")==0) int main(int argc, char *argv[]) { SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc = SQL_NULL_HDBC; SQLHSTMT hstmt = SQL_NULL_HSTMT; SQLCHAR uid[18+1]; SQLCHAR pwd[30+1]; SQLCHAR dbname[SQL_MAX_DSN_LENGTH+1]; SQLCHAR buffer[500]; SQL SMALLINT dbms_sz = 0; char dbms[20]; SQLRETURN rc = SQL_SUCCESS; SQLINTEGER sqlcode = 0; char errorMsgText[MMDB_ERROR_MSG_TEXT_LEN+1]; char *program = "enable; char *step; /*---- Message d'invite nom base de données, ID util. et mot de passe ----*/ if (argc > 5) || (argc >=2 && strcmp(argv[1],"?")== 0)) { printf("Syntax for enable - enabling a DB2 UDB database: \n" " enable database_name userid password\n"); exit(0); } if (argc == 4) { strcpy((char *)dbname, argv[1]); strcpy((char *)uid , argv[2]); strcpy((char *)pwd , argv[3]); } else { printf("Enter database name:\n"); gets((char *) dbName); printf("Enter userid:\n"); gets((char *) uid); printf("Enter password:\n"); gets((char *) pwd); } /*---- Connexion à la base de données --------------------------------*/ rc = cliInitialize(&henv, &hdbc, dbname, uid, pwd); cliCheckError(henv, hdbc, SQL_NULL_HSTMT, rc); if (rc < 0) goto SERROR; /*----- Application connectée à DB2/UDB ou à DB2/390 ? ----------------*/ rc = SQLGetInfo(hdbc, SQL_DBMS_NAME, (SQLPOINTER) &dbms, sizeof(dbms), &dbms_sz); cliCheckError(henv, hdbc, SQL_NULL_HSTMT, rc); if (rc < 0) goto SERROR; /****** Activation du serveur pour l'extension image ******/ if (!SERVER_IS_DB2390) { printf("%s: Enabling database......\n", program); } printf("%s: This may take a few minutes, please wait......\n", program); if (!SERVER_IS_DB2390) { step="DBiEnableDatabase with NULL tablespace" rc=DBiEnableDatabase(NULL); } if (rc < 0) { printf("%s: %s failed!\n", program, step); printMsg(rc); DBiGetError(&sqlcode, errorMsgText); if (sqlcode) printf("sqlcode=%i, ",sqlcode); } else if (rc > 0) { printf("%s: %s, warning detected.\n", program, step); printMsg(rc); DBiGetError(&sqlcode, errorMsgText); printf("warning MsgText=%s\n", errorMsgText); } else printf("%s: %s OK\n", program, step); /****** Fin de l'activation du serveur *************************/ |
Utilisation de la ligne de commande db2ext : Dans cet exemple, la base de données est déjà connectée.
enable database for db2image