bcp_exec
Ejecuta una copia masiva completa de los datos entre una tabla de base de datos y un archivo de usuario.
Sintaxis
RETCODE bcp_exec (
HDBC hdbc,
LPDBINT pnRowsProcessed);
Argumentos
hdbc
Es el identificador de la conexión ODBC habilitado para la copia masiva.pnRowsProcessed
Es un puntero a un DBINT. La función bcp_exec llena este DBINT con el número de filas copiadas correctamente. Si pnRowsProcessed es NULL, bcp_exec lo omite.
Devuelve
SUCCEED, SUCCEED_ASYNC o FAIL. La función de bcp_exec devuelve SUCCEED si se copian todas las filas. bcp_exec devuelve SUCCEED_ASYNC si todavía queda pendiente una operación de copia masiva asincrónica. bcp_exec devuelve FAIL si se produce un error total o si el número de filas que generan los errores alcanza el valor especificado para BCPMAXERRS con bcp_control. BCPMAXERRS toma como valor predeterminado 10. La opción BCPMAXERRS afecta sólo a los errores de sintaxis detectados por el proveedor al leer las filas del archivo de datos (y no las filas enviadas al servidor). El servidor anula el lote cuando detecta un error con una fila. Compruebe en el parámetro pnRowsProcessed el número de filas copiadas correctamente.
Notas
Esta función copia los datos de un archivo de usuario en una tabla de base de datos o viceversa, dependiendo del valor del parámetro eDirection de bcp_init.
Antes de llamar a bcp_exec, llame a bcp_init con un nombre de archivo de usuario válido. Si no lo hace, se producirá un error.
bcp_exec es la única función de copia masiva que es probable que quede pendiente durante un período de tiempo indeterminado. Por lo tanto, es la única función de copia masiva que admite el modo asincrónico. Para establecer el modo asincrónico, utilice SQLSetConnectAttr para establecer SQL_ATTR_ASYNC_ENABLE en SQL_ASYNC_ENABLE_ON antes de llamar a bcp_exec. Para comprobar si se ha completado, llame a bcp_exec con los mismos parámetros. Si la copia masiva no se ha completado todavía, bcp_exec devuelve SUCCEED_ASYNC. También devuelve en pnRowsProcessed un recuento del estado del número de filas enviadas al servidor. Las filas enviadas al servidor no se confirman hasta que se alcanza el final de un lote.
Para obtener información sobre cambios importantes en la copia masiva a partir de SQL Server 2005, vea Realizar operaciones de copia masiva (ODBC).
Ejemplo
En el siguiente ejemplo, se muestra cómo utilizar 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.