Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet exemple montre les options spécifiques au pilote ODBC SQL Server pour enregistrer les statistiques de performances. L’exemple crée un fichier : odbcperf.log.Cet exemple montre à la fois la création d’un fichier journal des données de performances et l’affichage des données de performances directement à partir de la structure de données SQLPERF (la structure SQLPERF est définie dans Odbcss.h.). Cet exemple a été développé pour ODBC version 3.0 ou ultérieure.
Important
Lorsque c'est possible, utilisez l'authentification Windows. Si l’authentification Windows n’est pas disponible, invitez les utilisateurs à entrer leurs informations d’identification au moment de l’exécution. Évitez de stocker les informations d’identification dans un fichier. Si vous devez conserver les informations d’identification, vous devez les chiffrer avec l’API de chiffrement Win32.
Pour journaliser les données de performances du pilote à l’aide de l’administrateur ODBC
Dans le Panneau de configuration, double-cliquez sur Outils d’administration, puis double-cliquez sur Sources de données (ODBC). Vous pouvez également appeler odbcad32.exe.
Cliquez sur l’onglet User DSN, System DSN ou File DSN .
Cliquez sur la source de données pour laquelle consigner les performances.
Cliquez sur Configurer.
Dans l’Assistant Configuration DSN de Microsoft SQL Server, accédez à la page avec les statistiques du pilote ODBC du journal dans le fichier journal.
Sélectionnez les statistiques du pilote ODBC du journal dans le fichier journal. Dans la zone, placez le nom du fichier dans lequel les statistiques doivent être journalisées. Si vous le souhaitez , cliquez sur Parcourir pour parcourir le système de fichiers du journal des statistiques.
Pour journaliser les données de performances du pilote par programmation
Appelez SQLSetConnectAttr avec SQL_COPT_SS_PERF_DATA_LOG et le chemin d’accès complet et le nom de fichier du fichier journal des données de performances. Par exemple:
"C:\\Odbcperf.log"Appelez SQLSetConnectAttr avec SQL_COPT_SS_PERF_DATA et SQL_PERF_START pour démarrer la journalisation des données de performances.
Si vous le souhaitez, appelez SQLSetConnectAttr avec SQL_COPT_SS_LOG_NOW et NULL pour écrire un enregistrement délimité par tabulation des données de performances dans le fichier journal des données de données de performances. Cette opération peut être effectuée plusieurs fois au fur et à mesure que l’application s’exécute.
Appelez SQLSetConnectAttr avec SQL_COPT_SS_PERF_DATA et SQL_PERF_STOP pour arrêter la journalisation des données de performances.
Pour extraire des données de performances de pilote dans une application
Appelez SQLSetConnectAttr avec SQL_COPT_SS_PERF_DATA et SQL_PERF_START pour démarrer les données de performances de profilage.
Appelez SQLGetConnectAttr avec SQL_COPT_SS_PERF_DATA et l’adresse d’un pointeur vers une structure SQLPERF. Le premier appel de ce type définit le pointeur à l’adresse d’une structure SQLPERF valide qui contient les données de performances actuelles. Le pilote n’actualise pas continuellement les données dans la structure des performances. L’application doit répéter l’appel à SQLGetConnectAttr chaque fois qu’elle doit actualiser la structure avec des données de performances plus actuelles.
Appelez SQLSetConnectAttr avec SQL_COPT_SS_PERF_DATA et SQL_PERF_STOP pour arrêter la journalisation des données de performances.
Exemple :
Vous aurez besoin d’une source de données ODBC appelée AdventureWorks, dont la base de données par défaut est l’exemple de base de données AdventureWorks. (Vous pouvez télécharger l’exemple de base de données AdventureWorks à partir de la page d’accueil exemples microsoft SQL Server et projets communautaires .) Cette source de données doit être basée sur le pilote ODBC fourni par le système d’exploitation (le nom du pilote est « SQL Server »). Si vous générez et exécutez cet exemple en tant qu’application 32 bits sur un système d’exploitation 64 bits, vous devez créer la source de données ODBC avec l’administrateur ODBC dans %windir%\SysWOW64\odbcad32.exe.
Cet exemple se connecte à l’instance SQL Server par défaut de votre ordinateur. Pour vous connecter à une instance nommée, modifiez la définition de la source de données ODBC pour spécifier l’instance au format suivant : serveur\namedinstance. Par défaut, SQL Server Express s’installe sur une instance nommée.
Compilez avec odbc32.lib.
// compile with: odbc32.lib
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
void Cleanup() {
if (hstmt1 != SQL_NULL_HSTMT)
SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
if (hdbc1 != SQL_NULL_HDBC) {
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
}
if (henv != SQL_NULL_HENV)
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
int main() {
RETCODE retcode;
// Pointer to the ODBC driver performance structure.
SQLPERF *PerfPtr;
SQLINTEGER cbPerfPtr;
// Allocate the ODBC environment and save handle.
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
if( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLAllocHandle(Env) Failed\n\n");
Cleanup();
return(9);
}
// Notify ODBC that this is an ODBC 3.0 app.
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
if( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLSetEnvAttr(ODBC version) Failed\n\n");
Cleanup();
return(9);
}
// Allocate ODBC connection handle and connect.
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
if( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLAllocHandle(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
// This sample use Integrated Security. Please create the SQL Server
// DSN by using the Windows NT authentication.
retcode = SQLConnect(hdbc1, (UCHAR*)"AdventureWorks", SQL_NTS, (UCHAR*)"", SQL_NTS, (UCHAR*)"", SQL_NTS);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLConnect() Failed\n\n");
Cleanup();
return(9);
}
// Set options to log performance statistics. Specify file to use for the log.
retcode = SQLSetConnectAttr( hdbc1, SQL_COPT_SS_PERF_DATA_LOG, &"odbcperf.log", SQL_NTS);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLSetConnectAttr() Failed\n\n");
Cleanup();
return(9);
}
// Start the performance statistics log.
retcode =
SQLSetConnectAttr( hdbc1, SQL_COPT_SS_PERF_DATA, (SQLPOINTER)SQL_PERF_START, SQL_IS_UINTEGER);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLSetConnectAttr() Failed\n\n");
Cleanup();
return(9);
}
// Allocate statement handle, then execute command.
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLAllocHandle() Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLExecDirect(hstmt1, (UCHAR*)"SELECT * FROM Purchasing.Vendor", SQL_NTS);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLExecDirect() Failed\n\n");
Cleanup();
return(9);
}
// Clear any result sets generated.
while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA ) {
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLMoreResults() Failed\n\n");
Cleanup();
return(9);
}
}
retcode = SQLExecDirect(hstmt1, (UCHAR*)"SELECT * FROM Sales.Store", SQL_NTS);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLExecDirect() Failed\n\n");
Cleanup();
return(9);
}
// Clear any result sets generated.
while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA ) {
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLMoreResults() Failed\n\n");
Cleanup();
return(9);
}
}
// Generate a long-running query.
retcode = SQLExecDirect(hstmt1, (UCHAR*)"waitfor delay '00:00:04' ", SQL_NTS);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLExecDirect() Failed\n\n");
Cleanup();
return(9);
}
// Clear any result sets generated.
while ( ( retcode = SQLMoreResults(hstmt1) ) != SQL_NO_DATA ) {
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLMoreResults() Failed\n\n");
Cleanup();
return(9);
}
}
// Write current statistics to the performance log.
retcode =
SQLSetConnectAttr( hdbc1, SQL_COPT_SS_PERF_DATA_LOG_NOW, (SQLPOINTER)NULL, SQL_IS_UINTEGER);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLSetConnectAttr() Failed\n\n");
Cleanup();
return(9);
}
// Get pointer to current SQLPerf structure.
// Print a couple of statistics.
retcode =
SQLGetConnectAttr( hdbc1, SQL_COPT_SS_PERF_DATA, (SQLPOINTER)&PerfPtr, SQL_IS_POINTER, &cbPerfPtr);
if( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLGetConnectAttr() Failed\n\n");
Cleanup();
return(9);
}
printf("SQLSelects = %d, SQLSelectRows = %d\n", PerfPtr->SQLSelects, PerfPtr->SQLSelectRows);
// Cleanup
SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
Voir aussi
Rubriques pratiques sur les performances du pilote ODBC de profilage (ODBC)
Profilage des performances du pilote ODBC