Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo esempio viene illustrato come utilizzare la funzione ODBC bcp_init con un file di formato.
Per eseguire la copia bulk usando un file di formato
Allocare un handle di ambiente e un handle di connessione.
Impostare SQL_COPT_SS_BCP e SQL_BCP_ON per abilitare le operazioni di copia bulk.
Connettersi a Microsoft SQL Server.
Chiamare bcp_init per impostare le informazioni seguenti:
Nome della tabella o della vista da cui eseguire la copia bulk da o a.
Nome del file di dati che contiene i dati da copiare nel database o che riceve i dati durante la copia dal database.
Nome di un file di dati per ricevere eventuali messaggi di errore di copia bulk (specificare NULL se non si desidera un file di messaggio).
Direzione della copia: DB_IN dal file alla tabella o alla vista.
Chiamare bcp_readfmt per leggere il file di formato che descrive il file di dati da usare dall'operazione di copia bulk.
Chiamare bcp_exec per eseguire l'operazione di copia bulk.
Esempio
Questo esempio non è supportato in IA64.
Sarà necessaria un'origine dati ODBC denominata AdventureWorks, il cui database predefinito è il database di esempio AdventureWorks. È possibile scaricare il database di esempio AdventureWorks dalla home page degli esempi di Microsoft SQL Server e dei progetti della community . Questa origine dati deve essere basata sul driver ODBC fornito dal sistema operativo (il nome del driver è "SQL Server"). Se si compila ed esegue questo esempio come applicazione a 32 bit in un sistema operativo a 64 bit, è necessario creare l'origine dati ODBC con l'amministratore ODBC in %windir%\SysWOW64\odbcad32.exe.
Questo esempio si connette all'istanza predefinita di SQL Server del computer. Per connettersi a un'istanza denominata, modificare la definizione dell'origine dati ODBC per specificare l'istanza usando il formato seguente: server\namedinstance. Per impostazione predefinita, SQL Server Express viene installato in un'istanza denominata.
Eseguire il primo listato di codice (Transact-SQL) per creare la tabella che verrà usata dall'esempio.
Copiare il secondo listato di codice e incollarlo in un file denominato Bcpfmt.fmt. Ogni colonna della tabella è separata da un carattere di tabulazioni.
Copiare il terzo listato di codice e incollarlo in un file denominato Bcpodbc.bcp. Un carattere di tabulazioni precede ogni ritorno a capo nel file.
Compilare il quarto elenco di codice (C++) con odbc32.lib e odbcbcp.lib. Se è stato compilato con MSBuild.exe, copiare Bcpfmt.fmt e Bcpodbc.bcp dalla directory del progetto alla directory con il .exe e quindi richiamare il .exe.
Eseguire il quinto listato di codice (Transact-SQL) per eliminare la tabella usata dall'esempio.
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
Vedere anche
Procedure per la copia bulk con il driver ODBC di SQL Server (ODBC)
Uso di file di dati e file di formato