IBCPSession::BCPInit (поставщик OLE DB собственного клиента)
Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)
Внимание
Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Поставщик OLE DB собственного клиента SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для новой разработки. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server .
Инициализирует структуру массового копирования, выполняет проверку ошибок, проверяет правильность имен файла данных и файла форматирования, а затем открывает эти файлы.
Синтаксис
HRESULT BCPInit(
const wchar_t *pwszTable,
const wchar_t *pwszDataFile,
const wchar_t *pwszErrorFile,
int eDirection);
Замечания
Метод BCPInit необходимо вызывать перед вызовом любого другого метода массового копирования. Метод BCPInit выполняет необходимые инициализации для массовой копии данных между рабочей станцией и SQL Server.
Метод BCPInit проверяет структуру конечной или исходной таблицы базы данных, а не файл данных. Он указывает значения форматов данных для файла данных на основе каждого столбца в таблице, представлении базы данных или результирующем наборе SELECT. Эта спецификация включает тип данных каждого столбца, присутствие или отсутствие длины и допустимости значений NULL и строки байтов признака конца, а также ширину для типов данных с фиксированной длиной. Метод BCPInit устанавливает эти значения указанным ниже образом.
Указанный тип данных представляет собой тип данных столбца в таблице базы данных, представлении или результирующем наборе SELECT. Тип данных перечисляется собственными типами данных SQL Server, указанными в файле заголовка собственного клиента SQL Server (sqlncli.h). Их значения строятся по следующему шаблону: BCP_TYPE_XXX. Данные представлены в компьютерной форме. Это значит, что данные из столбца с типом данных integer представлены четырехбайтовой последовательностью с прямым или обратным порядком следования байтов в зависимости от компьютера, создавшего файл данных.
Если тип данных базы данных имеет фиксированную длину, то для данных файла данных также задается фиксированная длина. Методы массового копирования, обрабатывающие данные (например, IBCPSession::BCPExec) анализируют строки данных, ожидая, что длина данных в файле данных будет совпадать с длиной данных, определенной в таблице или представлении базы данных или списке столбцов SELECT. Например, данные в столбце базы данных, определенные как
char(13)
, должны быть представлены в виде 13 символов для каждой строки данных в файле. Данные фиксированной длины могут быть обозначены префиксом с признаком значения NULL, если столбец базы данных допускает значения NULL.При копировании данных в SQL Server файл данных должен иметь данные для каждого столбца в таблице базы данных. При копировании данных из SQL Server данные из всех столбцов в таблице базы данных, представлении или результирующем наборе SELECT копируются в файл данных.
При копировании данных в SQL Server порядковое положение столбца в файле данных должно совпадать с порядковой позицией столбца в таблице базы данных. При копировании данных из SQL Server метод BCPExec помещает данные на основе порядкового положения столбца в таблице базы данных.
Если тип данных в базе данных является типом с переменной длиной (например,
varbinary(22)
), или если столбец базы данных может содержать значения NULL, данные в файле данных предваряются признаком длины и допустимости значений NULL. Ширина признака изменяется в зависимости от типа данных и версии массового копирования. Параметр метода IBCPSession::BCPControl BCP_OPTION_FILEFMT обеспечивает совместимость между более ранними файлами данных массового копирования и серверами, работающими в более поздних версиях SQL Server, указывая, когда ширина индикаторов в данных сужается, чем ожидалось.
Примечание.
Чтобы изменить значения форматов данных, указанные для файла данных, используйте методы IBCPSession::BCPColumns и IBCPSession::BCPColFmt.
Массовые копии в SQL Server можно оптимизировать для таблиц, не содержащих индексы, задав параметр базы данных в /bulkcopy.
Аргументы
pwszTable[IN]
Имя таблицы базы данных, в которую или из которой выполняется копирование. Имя может включать имя базы данных или имя владельца. Примеры: «pubs.username.titles», «pubs..titles», «username.titles».
Если аргумент eDirection имеет значение BCP_DIRECTION_OUT, аргумент pwszTable может являться именем представления базы данных.
Если аргумент eDirection имеет значение BCP_DIRECTION_OUT и инструкция SELECT указана с помощью метода BCPControl перед вызовом метода BCPExec, аргумент pwszTable должен иметь значение NULL.
pwszDataFile[IN]
Имя пользовательского файла, в который или из которого выполняется копирование.
pwszErrorFile[IN]
Имя файла ошибок, который заполняется сообщениями о ходе выполнения, сообщениями об ошибках и копиями строк, которые не удалось скопировать из пользовательского файла в таблицу. Если аргумент pwszErrorFile имеет значение NULL, файл ошибок не используется.
eDirection[IN]
Направление операции копирования: BCP_DIRECTION_IN или BCP_DIRECTION _OUT. BCP_DIRECTION _IN обозначает копирование из пользовательского файла в таблицу базы данных; BCP_DIRECTION _OUT обозначает копирование из таблицы базы данных в пользовательский файл.
Значения кода возврата
S_OK
Метод выполнен успешно.
E_FAIL
Произошла ошибка, связанная с поставщиком. Подробные сведения можно получить с помощью интерфейса ISQLServerErrorInfo.
E_OUTOFMEMORY
Недостаточно памяти.
E_INVALIDARG
Один или несколько аргументов были указаны неправильно. Например, указано недопустимое имя файла.
См. также
IBCPSession (OLE DB)
Выполнение операций массового копирования