Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Beispiel zeigt, wie die ODBC-Funktion bcp_init mit einer Formatdatei verwendet wird.
So kopieren Sie eine Massenkopie mithilfe einer Formatdatei
Weisen Sie ein Umgebungshandle und ein Verbindungshandle zu.
Legen Sie SQL_COPT_SS_BCP und SQL_BCP_ON fest, um Massenkopievorgänge zu aktivieren.
Stellen Sie eine Verbindung mit Microsoft SQL Server her.
Rufen Sie bcp_init auf, um die folgenden Informationen festzulegen:
Der Name der Tabelle oder Ansicht, aus der bzw. in die eine Massenkopie kopiert werden soll.
Der Name der Datendatei, die die daten enthält, die in die Datenbank kopiert werden sollen oder die Beim Kopieren aus der Datenbank Daten empfängt.
Der Name einer Datendatei zum Empfangen von Fehlermeldungen für Massenkopien (geben Sie NULL an, wenn Sie keine Nachrichtendatei wünschen).
Die Richtung der Kopie: DB_IN aus der Datei in die Tabelle oder Ansicht.
Rufen Sie bcp_readfmt auf, um die Formatdatei zu lesen, die die datendatei beschreibt, die vom Massenkopievorgang verwendet werden soll.
Rufen Sie bcp_exec auf, um den Massenkopievorgang auszuführen.
Beispiel
Dieses Beispiel wird für IA64 nicht unterstützt.
Sie benötigen eine ODBC-Datenquelle namens AdventureWorks, deren Standarddatenbank die AdventureWorks-Beispieldatenbank ist. (Sie können die AdventureWorks-Beispieldatenbank von der Startseite für Microsoft SQL Server-Beispiele und Communityprojekte herunterladen.) Diese Datenquelle muss auf dem ODBC-Treiber basieren, der vom Betriebssystem bereitgestellt wird (der Treibername lautet "SQL Server"). Wenn Sie dieses Beispiel als 32-Bit-Anwendung auf einem 64-Bit-Betriebssystem erstellen und ausführen, müssen Sie die ODBC-Datenquelle mit dem ODBC-Administrator in %windir%\SysWOW64\odbcad32.exeerstellen.
In diesem Beispiel wird eine Verbindung mit der SQL Server-Standardinstanz Ihres Computers hergestellt. Um eine Verbindung mit einer benannten Instanz herzustellen, ändern Sie die Definition der ODBC-Datenquelle, um die Instanz mithilfe des folgenden Formats anzugeben: Server\nAmedinstance. Sql Server Express wird standardmäßig in einer benannten Instanz installiert.
Führen Sie den ersten (Transact-SQL) Codeauflistung aus, um die Tabelle zu erstellen, die das Beispiel verwendet.
Kopieren Sie den zweiten Codeeintrag, und fügen Sie ihn in eine Datei namens Bcpfmt.fmt ein. Jede Spalte in der Tabelle wird durch ein Tabstoppzeichen getrennt.
Kopieren Sie den dritten Codeeintrag, und fügen Sie ihn in eine Datei namens Bcpodbc.bcp ein. Jedem Wagenrücklauf in der Datei wird ein Tabstoppzeichen vorangestellt.
Kompilieren Sie den vierten Codeeintrag (C++) mit odbc32.lib und odbcbcp.lib. Wenn Sie mit MSBuild.exeerstellt haben, kopieren Sie Bcpfmt.fmt und Bcpodbc.bcp aus dem Projektverzeichnis in das Verzeichnis mit dem .exe, und rufen Sie dann die .exeauf.
Führen Sie den fünften (Transact-SQL) Codeauflistung aus, um die tabelle zu löschen, die das Beispiel verwendet hat.
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
Siehe auch
Massenkopien mit dem SQL Server ODBC-Treiber how-to Topics (ODBC)
Verwenden von Datendateien und Formatieren von Dateien