Freigeben über


bcp_exec

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.  

Siehe auch

Massenkopierfunktionen