Поделиться через


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

Преобразовать программу массового копирования DB-Library в ODBC легко, так как функции массового копирования, поддерживаемые драйвером SQL SERVER NATIVE CLIENT ODBC, похожи на 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 Native Client не поддерживает обработчики DB-Library сообщений и ошибок. Необходимо вызвать SQLGetDiagRec для получения ошибок и сообщений, вызванных функциями массового копирования ODBC. Версии ODBC функций массового копирования возвращают стандартные коды возврата массового копирования SUCCEED или FAILED, а не коды возврата ODBC, такие как SQL_SUCCESS или SQL_ERROR.

  • Значения, указанные для параметра DB-Library bcp_bindvarlen , интерпретируются иначе, чем параметр ODBC bcp_bindcbData .

    Указанное условие DB-Library значение varlen Значение ODBC cbData
    Предоставлены значения NULL 0 -1 (SQL_NULL_DATA)
    Предоставлены данные переменной длины -1 -10 (SQL_VARLEN_DATA)
    Символьная или двоичная строка нулевой длины Н/Д 0

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

  • DB-Library bcp_colfmtfile_collen и ODBC bcp_colfmtcbUserData имеют ту же проблему, что и указанные выше параметры bcp_bind varlen и cbData. Измените все DB-Library file_collen спецификации -1 на SQL_VARLEN_DATA и все file_collen спецификации 0 на SQL_NULL_DATA.

  • Параметр iValue функции bcp_control ODBC является указателем void. В DB-Library значение iValue было целым числом. Приведите значения для odBC iValue к void *.

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

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

    • BCPODBC

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

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

      1997-01-01 00:00:00.000  
      

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

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

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

    • BCPHINTS

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

    • BCPFILECP

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

    • BCPUNICODEFILE

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

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

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

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

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

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

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

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

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

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

См. также:

Выполнение операций массового копирования (ODBC)
Bulk Copy Functions