Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполняет полную массовую копию данных между таблицей базы данных и пользовательским файлом.
Синтаксис
RETCODE bcp_exec (
HDBC
hdbc
,
LPDBINT
pnRowsProcessed
);
Аргументы
hdbc
Дескриптор соединения ODBC с поддержкой массового копирования.
pnRowsProcessed
Указатель на DBINT. Функция bcp_exec заполняет этот DBINT числом строк, успешно скопированных. Если pnRowsProcessed имеет значение NULL, он игнорируется bcp_exec.
Возвраты
УСПЕШНО, SUCCEED_ASYNC или СБОЙ. Функция bcp_exec возвращает успешное копирование всех строк. 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(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.