Перевод массового копирования с DB-Library на ODBC

Перевод массового копирования с DB-Library на ODBC прост, так как функции массового копирования, поддерживаемые драйвером ODBC для собственного клиента SQL Server, аналогичны функциям массового копирования DB-Library, за исключением следующих случаев.

  • Приложения DB-Library передают указатель на структуру DBPROCESS как первый параметр функций массового копирования. В приложениях ODBC указатель DBPROCESS заменяется дескриптором соединения ODBC.

  • Приложения DB-Library вызывают BCP_SETL перед соединением, чтобы обеспечить поддержку массового копирования для DBPROCESS. Приложения ODBC вместо этого вызывают SQLSetConnectAttr перед подключением, чтобы обеспечить поддержку операций массового копирования для дескриптора соединения:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • Драйвер ODBC для собственного клиента SQL Server не поддерживает обработчики сообщений и ошибок DB-Library; для получения ошибок и сообщений, формируемых функциями массового копирования ODBC, необходимо вызывать SQLGetDiagRec. Версии ODBC функций массового копирования возвращают стандартные коды возврата массового копирования SUCCEED или FAILED, а не коды возврата ODBC, такие как SQL_SUCCESS или SQL_ERROR.

  • Указываемые значения параметра varlen функции bcp_bind DB-Library интерпретируются не так, как параметр cbData функции bcp_bind в ODBC.

    Указанное условие

    Значение varlen в DB-Library

    Значение cbData в ODBC

    Предоставлены значения NULL

    0

    -1 (SQL_NULL_DATA)

    Предоставлены данные переменной длины

    -1

    -10 (SQL_VARLEN_DATA)

    Символьная или двоичная строка нулевой длины

    Не используется

    0

    В DB-Library значение varlen, равное -1, указывает, что предоставлены данные переменной длины, а в ODBC cbData означает, что предоставлены только значения NULL. Замените любые упоминания значения varlen для DB-Library, равного -1, на SQL_VARLEN_DATA, а любые упоминания значения varlen, равного 0, на SQL_NULL_DATA.

  • При использовании параметров file_collen функции bcp_colfmt DB-Library и cbUserData функции bcp_colfmt ODBC возникает та же проблема, что и при использовании описанных выше параметров varlen и cbData функции bcp_bind. Замените любые определения значения -1 параметра file_collen для DB-Library на SQL_VARLEN_DATA, а любые определения значения 0 параметра file_collen на SQL_NULL_DATA.

  • Параметр iValue функции bcp_control в ODBC является указателем на void. В DB-Library значение iValue имело тип integer. Для использования ODBC преобразуйте значение iValue в void *.

  • Параметр BCPMAXERRS функции bcp_control определяет, сколько отдельных строк могут вызвать ошибки, прежде чем операция массового копирования завершится неудачно. Значение BCPMAXERRS по умолчанию равно 0 (отказ при первой ошибке) в версии bcp_control для DB-Library, а в версии для ODBC оно равно 10. Приложения DB-Library, которые полагаются на равное 0 значение по умолчанию, обеспечивающее прерывание операций массового копирования, следует изменить, они должны вызывать функцию bcp_control ODBC для установки значения 0 параметра BCPMAXERRS.

  • Функция bcp_control для ODBC поддерживает следующие параметры, несовместимые с версией bcp_control для DB-Library:

    • BCPODBC

      Значение TRUE указывает, что значения datetime и smalldatetime, сохраняемые в символьном формате, будут иметь префикс и суффикс escape-последовательности временной метки ODBC. Это относится только к операциям BCP_OUT.

      Если параметр BCPODBC имеет значение FALSE, то значения datetime, преобразуемые в символьные строки, выводятся следующим образом:

      1997-01-01 00:00:00.000
      

      Если для параметра BCPODBC устанавливается значение TRUE, то же значение datetime выводится так:

      {ts '1997-01-01 00:00:00.000' }
      
    • BCPKEEPIDENTITY

      Значение TRUE указывает, что функции массового копирования вставляют значения данных, предоставленные для столбцов с ограничениями идентификаторов. Если это значение не задано, то для вставляемых строк создаются новые значения идентификаторов.

    • BCPHINTS

      Определяет различные оптимизации для массового копирования. Этот параметр не может использоваться в SQL Server 6.5 и более ранних версиях.

    • BCPFILECP

      Задает кодовую страницу файла массового копирования.

    • BCPUNICODEFILE

      Указывает, что файл массового копирования в символьном формате является файлом в Юникоде.

  • Функция bcp_colfmt ODBC не поддерживает признак file_type типа данных SQLCHAR, так как он конфликтует с определением типа SQLCHAR в ODBC. Вместо него используйте SQLCHARACTER для bcp_colfmt.

  • В ODBC-версиях функций массового копирования используется формат ODBC для работы со значениями datetime и smalldatetime в символьных строках — формат гггг-мм-дд чч:мм:сс.ссс; для значений smalldatetime используется формат ODBC гггг-мм-дд чч:мм:сс.

    Версии DB-Library функций массового копирования принимают значения datetime и smalldatetime, содержащиеся в символьных строках в следующих форматах:

    • Формат по умолчанию: ммм дд гггг чч:ммxx, где xx — AM или PM.

    • Символьные строки datetime и smalldatetime в любом формате, поддерживаемом функцией dbconvert DB-Library.

    • Если установлен флажок Использовать международные настройки на вкладке Параметры DB-Library в программе SQL Server Client Network Utility, то функции массового копирования DB-Library также принимают даты в региональном формате, определенном для языкового стандарта, установленного в реестре клиентского компьютера.

    Функции массового копирования DB-Library не принимают форматы datetime и smalldatetime ODBC.

    Если атрибут инструкции SQL_SOPT_SS_REGIONALIZE установлен в значение SQL_RE_ON, функции массового копирования ODBC принимают даты в региональном формате данных, определенном для языкового стандарта, установленного в реестре клиентского компьютера.

  • При выводе значений money в символьном формате функции массового копирования ODBC обеспечивают точность в четыре десятичных знака без включения запятых-разделителей; версии DB-Library обеспечивают точность только в два десятичных знака и включают запятые-разделители.