bcp_exec
Выполняет полное массовое копирование данных между таблицей база данных и пользовательским файлом.
Синтаксис
RETCODE bcp_exec ( HDBC hdbc, LPDBINT pnRowsProcessed);
Arguments
hdbc
Дескриптор соединения ODBC с поддержкой массового копирования.pnRowsProcessed
Является указателем на DBINT. Функция bcp_exec заполняет DBINT числом успешно скопированных строк. Если значение параметра pnRowsProcessed равно NULL, то оно не учитывается функцией bcp_exec.
Возвращаемое значение
SUCCEED, SUCCEED_ASYNC или FAIL. Функция bcp_exec возвращает значение SUCCEED, если копируются все строки. Функция bcp_exec возвращает значение SUCCEED_ASYNC, если все еще выполняется массовое копирование в асинхронном режиме. Функция bcp_exec возвращает значение FAIL, если произошел сбой или если число строк выдачи ошибки превысило значение, указанное для BCPMAXERRS при помощи функции bcp_control. Для BCPMAXERRS значение по умолчанию равно 10. Параметр BCPMAXERRS относится только к синтаксическим ошибкам, находимым поставщиком в процессе чтения строк из файла данных (и не относится к строкам, отправляемым на сервер). Сервер прерывает выполнение пакета при нахождении ошибки в строке. Проверьте параметр pnRowsProcessed для числа успешно скопированных строк.
Замечания
Эта функция копирует данные из пользовательского файла в таблицу базы данных, или наоборот, в зависимости от значения параметра eDirection в функции bcp_init.
Перед вызовом функции bcp_exec необходимо вызвать функцию bcp_init с допустимым именем пользовательского файла. Несоблюдение этого правила приведет к ошибке.
Функция bcp_exec представляет собой только функцию массового копирования, которая с большой долей вероятности остается необработанной в течение неограниченного отрезка времени. Вот почему это единственная функция массового копирования, поддерживающая асинхронный режим. Для установки асинхронного режима используется функция SQLSetConnectAttr, чтобы выставить SQL_ATTR_ASYNC_ENABLE в значение SQL_ASYNC_ENABLE_ON перед вызовом функции bcp_exec. Для проверки завершения копирования необходимо вызвать функцию bcp_exec с такими же параметрами. Если массовое копирование еще не завершено, функция bcp_exec возвращает значение SUCCEED_ASYNC. Она также возвращает в параметре pnRowsProcessed состояние счетчика числа строк, которые были отправлены серверу. Строки, отправленные на сервер, не фиксируются до тех пор, пока не будет достигнут конец пакета.
Сведения о важных изменениях в массовом копировании, реализованных в версии SQL Server 2005, см. в разделе Выполнение операций массового копирования (ODBC).
Примеры
Следующий пример иллюстрирует использование функции 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.