bcp_exec

Esegue una copia bulk completa di dati tra una tabella di database e un file utente.

Sintassi

RETCODE bcp_exec (
        HDBC hdbc,
        LPDBINT pnRowsProcessed);

Argomenti

  • hdbc
    Handle di connessione ODBC abilitato per la copia bulk.

  • pnRowsProcessed
    Puntatore a DBINT. La funzione bcp_exec completa DBINT con il numero di righe copiate correttamente. Se pnRowsProcessed è NULL, viene ignorato da bcp_exec.

Valori restituiti

SUCCEED, SUCCEED_ASYNC o FAIL. La funzione bcp_exec restituisce SUCCEED se vengono copiate tutte le righe. bcp_exec restituisce SUCCEED_ASYNC se un'operazione di copia bulk asincrona è ancora in attesa. bcp_exec restituisce FAIL se si verifica un errore completo o se il numero di righe che generano errori raggiunge il valore specificato per BCPMAXERRS tramite bcp_control. Il valore predefinito BCPMAXERRS è 10. L'opzione BCPMAXERRS influisce solo sugli errori di sintassi rilevati dal provider durante la lettura delle righe dal file di dati, ma non delle righe inviate al server. Il server interrompe il batch quando rileva un errore con una riga. Controllare il parametro pnRowsProcessed per individuare il numero di righe copiate correttamente.

Osservazioni

Questa funzione copia dati da un file utente a una tabella di database o viceversa, a seconda del valore del parametro eDirection in bcp_init.

Prima di chiamare bcp_exec, chiamare bcp_init con un nome di file utente valido. In caso contrario, viene generato un errore.

Poiché bcp_exec è l'unica funzione di copia bulk che potrebbe rimanere in attesa per un certo periodo di tempo, è anche l'unica funzione di copia bulk che supporta la modalità asincrona. Per impostare la modalità asincrona, utilizzare SQLSetConnectAttr per impostare SQL_ATTR_ASYNC_ENABLE su SQL_ASYNC_ENABLE_ON prima di chiamare bcp_exec. Per testare il completamento, chiamare bcp_execcon gli stessi parametri. Se la copia bulk non è stata ancora completata, bcp_exec restituisce SUCCEED_ASYNC. Restituisce inoltre in pnRowsProcessed un conteggio di stato del numero di righe inviate al server. Il commit delle righe inviate al server non viene eseguito fino a quando non viene raggiunta la fine di un batch.

Per informazioni su una modifica di rilievo apportata alla copia bulk a partire da SQL Server 2005, vedere Esecuzione di operazioni di copia bulk (ODBC).

Esempio

Nell'esempio seguente viene illustrato come utilizzare bcp_exec:

// 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(dbproc, &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.

Vedere anche

Riferimento