Copie en bloc à l’aide d’un fichier de format (ODBC)

Cet exemple montre comment utiliser la fonction ODBC bcp_init avec un fichier de format.

Pour copier en bloc à l’aide d’un fichier de format

  1. Allouez un handle d’environnement et un handle de connexion.

  2. Définissez SQL_COPT_SS_BCP et SQL_BCP_ON pour activer les opérations de copie en bloc.

  3. Connectez-vous à Microsoft SQL Server.

  4. Appelez bcp_init pour définir les informations suivantes :

    • Nom de la table ou de la vue à copier en bloc depuis ou vers.

    • Nom du fichier de données qui contient les données à copier dans la base de données ou qui reçoit des données lors de la copie de la base de données.

    • Nom d’un fichier de données à recevoir des messages d’erreur de copie en bloc (spécifiez NULL si vous ne souhaitez pas un fichier de message).

    • Direction de la copie : DB_IN du fichier vers la table ou la vue.

  5. Appelez bcp_readfmt pour lire le fichier de format décrivant le fichier de données à utiliser par l’opération de copie en bloc.

  6. Appelez bcp_exec pour exécuter l’opération de copie en bloc.

Exemple :

Cet exemple n’est pas pris en charge sur IA64.

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.

Exécutez la première liste de codes (Transact-SQL) pour créer la table que l’exemple utilisera.

Copiez la deuxième liste de code et collez-la dans un fichier appelé Bcpfmt.fmt. Chaque colonne du tableau est séparée par un caractère d’onglet.

Copiez la troisième liste de code et collez-la dans un fichier appelé Bcpodbc.bcp. Un caractère tabulation précède chaque retour chariot dans le fichier.

Compilez la quatrième liste de codes (C++) avec odbc32.lib et odbcbcp.lib. Si vous avez créé avec MSBuild.exe, copiez Bcpfmt.fmt et Bcpodbc.bcp à partir du répertoire du projet dans le répertoire avec le .exe, puis appelez le .exe.

Exécutez la cinquième liste de codes (Transact-SQL) pour supprimer la table utilisée par l’exemple.

use AdventureWorks  
CREATE TABLE BCPDate (cola int, colb datetime)  
8.0  
2  
1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin  
2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin  
1  
2  
// compile with: odbc32.lib odbcbcp.lib  
#include <stdio.h>  
#include <windows.h>  
#include <sql.h>  
#include <sqlext.h>  
#include <odbcss.h>  
  
SQLHENV henv = SQL_NULL_HENV;  
HDBC hdbc1 = SQL_NULL_HDBC;   
  
void Cleanup() {  
   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;  
   SDWORD cRows;  
  
   // 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, set BCP mode, 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);  
   }  
  
   retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLSetConnectAttr(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Sample uses Integrated Security. Create SQL Server DSN using 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);  
   }  
  
   // Initialize the bulk copy.  
   retcode = bcp_init(hdbc1, "BCPDate", "BCPODBC.bcp", NULL, DB_IN);  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_init(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Read the format file.  
   retcode = bcp_readfmt(hdbc1, "BCPFMT.fmt");  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_readfmt(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Execute the bulk copy.  
   retcode = bcp_exec(hdbc1, &cRows);  
   if ( (retcode != SUCCEED) ) {  
      printf("bcp_exec(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   printf("Number of rows bulk copied in = %d.\n", cRows);  
  
   // Cleanup  
   SQLDisconnect(hdbc1);  
   SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
   SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
use AdventureWorks  
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'BCPDate')  
     DROP TABLE BCPDate  
GO  

Voir aussi

Copie en bloc avec les rubriques de procédures du pilote ODBC SQL Server (ODBC)
Utilisation de fichiers de données et de fichiers de format