IBCPSession::BCPInit (поставщик OLE DB собственного клиента)

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform 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)
Выполнение операций массового копирования