bcp_exec
Führt ein vollständiges Massenkopieren der Daten zwischen einer Datenbanktabelle und einer Benutzerdatei aus.
Syntax
RETCODE bcp_exec (
HDBC
hdbc
,
LPDBINT
pnRowsProcessed
);
Argumente
hdbc
Das für das Massenkopieren aktivierte ODBC-VerbindungshandlepnRowsProcessed
Ein Zeiger auf DBINT. Die bcp_exec-Funktion füllt DBINT mit der Anzahl der erfolgreich kopierten Zeilen. Wenn pnRowsProcessed auf NULL festgelegt ist, wird es von bcp_exec ignoriert.
Rückgabewerte
SUCCEED, SUCCEED_ASYNC oder FAIL. Die bcp_exec-Funktion gibt SUCCEED zurück, wenn alle Zeilen kopiert werden. bcp_exec gibt SUCCEED_ASYNC zurück, wenn weiterhin ein asynchroner Massenkopiervorgang aussteht. bcp_exec gibt FAIL zurück, wenn ein vollständiger Fehler auftritt oder wenn die Anzahl der Zeilen, die Fehler generieren, den in BCPMAXERRS mithilfe von bcp_control angegebenen Wert erreicht. BCPMAXERRS ist standardmäßig auf 10 festgelegt. Die BCPMAXERRS-Option wirkt sich nur auf die Syntaxfehler aus, die vom Anbieter während des Lesens der Zeilen aus der Datendatei (und nicht der Zeilen, die an den Server gesendet werden) erkannt werden. Der Server bricht den Batch ab, wenn er einen Fehler in einer Zeile erkennt. Überprüfen Sie den pnRowsProcessed-Parameter auf die Anzahl an erfolgreich kopierten Zeilen.
Hinweise
Diese Funktion kopiert Daten aus einer Datendatei in eine Datenbanktabelle oder umgekehrt, abhängig vom Wert des eDirection-Parameters in bcp_init.
Vor dem Aufrufen von bcp_exec rufen Sie bcp_init mit einem gültigen Benutzerdateinamen auf. Andernfalls wird ein Fehler ausgelöst.
bcp_exec ist die einzige Massenkopierfunktion, die im Allgemeinen für eine beliebige Zeitlänge aussteht. Es ist deshalb die einzige Massenkopierfunktion, die den asynchronen Modus unterstützt. Um den asynchronen Modus festzulegen, verwenden Sie SQLSetConnectAttr, um SQL_ATTR_ASYNC_ENABLE auf SQL_ASYNC_ENABLE_ON festzulegen, bevor Sie bcp_exec aufrufen. Rufen Sie bcp_exec mit denselben Parametern auf, um den Vorgang auf Vollständigkeit zu überprüfen. Wenn das Massenkopieren noch nicht abgeschlossen wurde, gibt bcp_exec SUCCEED_ASYNC zurück. Außerdem wird in pnRowsProcessed eine Statuszahl der Anzahl der Zeilen zurückgegeben, die an den Server gesendet wurden. Für die zum Server gesendeten Zeilen wird erst ein Commit ausgeführt, wenn das Ende eines Batches erreicht wurde.
Informationen über eine wichtige Änderung im Massenkopiervorgang ab SQL Server 2005 finden Sie unter Durchführen von Massenkopiervorgängen (ODBC).
Beispiel
Im folgenden Beispiel wird die Verwendung von bcp_exec veranschaulicht:
// Variables like henv not specified.
HDBC hdbc;
DBINT nRowsProcessed;
// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
...
// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
SQL_IS_INTEGER);
// Connect to the data source, return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
_T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
{
// Raise error and return.
return;
}
// Initialize bulk copy.
if (bcp_init(hdbc, _T("pubs..authors"), _T("authors.sav"), NULL, DB_OUT)
== FAIL)
{
// Raise error and return.
return;
}
// Now, execute the bulk copy.
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)
{
if (nRowsProcessed == -1)
{
printf_s("No rows processed on bulk copy execution.\n");
}
else
{
printf_s("Incomplete bulk copy. Only %ld row%s copied.\n",
nRowsProcessed, (nRowsProcessed == 1) ? "": "s");
}
return;
}
printf_s("%ld rows processed.\n", nRowsProcessed);
// Carry on.