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.
Führt eine vollständige Massenkopie von Daten zwischen einer Datenbanktabelle und einer Benutzerdatei aus.
Syntax
RETCODE bcp_exec (
HDBC
hdbc
,
LPDBINT
pnRowsProcessed
);
Argumente
hdbc
Das für den Massenkopiervorgang aktivierte ODBC-Verbindungshandle.
pnRowsProcessed
Ist ein Zeiger auf einen DBINT. Die bcp_exec-Funktion füllt diesen DBINT mit der Anzahl der erfolgreich kopierten Zeilen aus. Wenn pnRowsProcessed NULL ist, wird sie von bcp_exec ignoriert.
Rückkehr
ERFOLGREICH, SUCCEED_ASYNC oder FAIL. Die bcp_exec-Funktion gibt ERFOLGREICH zurück, wenn alle Zeilen kopiert werden. bcp_exec gibt SUCCEED_ASYNC zurück, wenn ein asynchroner Massenkopievorgang noch ausstehend ist. bcp_exec gibt FAIL zurück, wenn ein vollständiger Fehler auftritt oder wenn die Anzahl der Zeilen, die Fehler generieren, den für BCPMAXERRS mit bcp_control angegebenen Wert erreicht. BCPMAXERRS ist standardmäßig auf 10 festgelegt. Die Option BCPMAXERRS wirkt sich nur auf die Syntaxfehler aus, die vom Anbieter beim Lesen der Zeilen aus der Datendatei erkannt wurden (und nicht auf die an den Server gesendeten Zeilen). Der Server bricht den Batch ab, wenn ein Fehler mit einer Zeile erkannt wird. Überprüfen Sie den Parameter "pnRowsProcessed " auf die Anzahl der erfolgreich kopierten Zeilen.
Bemerkungen
Diese Funktion kopiert Daten aus einer Benutzerdatei in eine Datenbanktabelle oder umgekehrt, abhängig vom Wert des eDirection-Parameters in bcp_init.
Rufen Sie vor dem Aufrufen von bcp_execbcp_init mit einem gültigen Benutzernamen auf. Wenn dies nicht getan wird, führt dies zu einem Fehler.
bcp_exec ist die einzige Massenkopiefunktion, die wahrscheinlich für eine längere Zeit ausstehende Funktion ist. Es handelt sich daher um die einzige Massenkopiefunktion, die den asynchronen Modus unterstützt. Verwenden Sie ZUM Festlegen des asynchronen Modus SQLSetConnectAttr , um SQL_ATTR_ASYNC_ENABLE vor dem Aufrufen von bcp_exec auf SQL_ASYNC_ENABLE_ON festzulegen. Um den Abschluss zu testen, rufen Sie bcp_exec mit denselben Parametern auf. Wenn die Massenkopie noch nicht abgeschlossen ist, gibt bcp_exec SUCCEED_ASYNC zurück. Sie gibt auch in pnRowsProcessed eine Statusanzahl der Anzahl der Zeilen zurück, die an den Server gesendet wurden. Zeilen, die an den Server gesendet werden, werden erst zugesichert, wenn das Ende eines Batches erreicht wurde.
Informationen zu einer bedeutenden Änderung des Massenkopiervorgangs ab SQL Server 2005 finden Sie unter Ausführen von Massenkopievorgängen (ODBC).
Beispiel
Das folgende Beispiel zeigt, wie sie bcp_exec verwenden:
// 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.