Перевод массового копирования с 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 обеспечивают точность только в два десятичных знака и включают запятые-разделители.