Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Esegue una copia bulk completa dei 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 un DBINT. La funzione bcp_exec riempie questo DBINT con il numero di righe copiate correttamente. Se pnRowsProcessed è NULL, viene ignorato da bcp_exec.
Restituzioni
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 sospeso. 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 usando bcp_control. Il valore predefinito di BCPMAXERRS è 10. L'opzione BCPMAXERRS influisce solo sugli errori di sintassi rilevati dal provider durante la lettura delle righe dal file di dati e non sulle righe inviate al server. Il server interrompe il batch quando rileva un errore con una riga. Controllare il parametro pnRowsProcessed per il numero di righe copiate correttamente.
Osservazioni:
Questa funzione copia i dati da un file utente in 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 file utente valido. In caso contrario, si verifica un errore.
bcp_exec è l'unica funzione di copia bulk probabilmente in sospeso per qualsiasi periodo di tempo. È quindi l'unica funzione di copia bulk che supporta la modalità asincrona. Per impostare la modalità asincrona, usare SQLSetConnectAttr per impostare SQL_ATTR_ASYNC_ENABLE su SQL_ASYNC_ENABLE_ON prima di chiamare bcp_exec. Per verificare il completamento, chiamare bcp_exec con gli stessi parametri. Se la copia bulk non è ancora stata completata, bcp_exec restituisce SUCCEED_ASYNC. Restituisce anche in pnRowsProcessed un conteggio dello stato del numero di righe inviate al server. Le righe inviate al server non vengono sottoposte a commit fino al raggiungimento della fine di un batch.
Per informazioni su una modifica di rilievo nella copia bulk a partire da SQL Server 2005, vedere Esecuzione di operazioni di copia bulk (ODBC).
Esempio
L'esempio seguente illustra come usare 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(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.