Compartilhar via


Convertendo de cópia em massa DB-Library em ODBC

É fácil converter um programa de cópia em massa DB-Library em ODBC porque as funções de cópia em massa com suporte do driver ODBC do SQL Server Native Client são semelhantes às funções de cópia em massa DB-Library, com as seguintes exceções:

  • Os aplicativos DB-Library passam, para uma estrutura DBPROCESS, um ponteiro como o primeiro parâmetro de funções de cópia em massa. Em aplicativos ODBC, o ponteiro DBPROCESS é substituído por um identificador de conexão ODBC.

  • Aplicativos DB-Library chamam BCP_SETL antes da conexão, para permitir operações de cópia em massa em um DBPROCESS. Aplicativos ODBC chamam SQLSetConnectAttr antes da conexão, para permitir operações em massa em um identificador de conexão:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • O driver ODBC do SQL Server Native Client não oferece suporte a identificadores de erros e de mensagens DB-Library; é preciso chamar SQLGetDiagRec para obter as mensagens e os erros gerados pelas funções ODBC de cópia em massa. As versões ODBC das funções de cópia em massa retornam os códigos de retorno padrão da cópia em massa, SUCCEED ou FAILED, e não os códigos de retorno ODBC, como SQL_SUCCESS ou SQL_ERROR.

  • Os valores especificados para o parâmetro DB-Library bcp_bindvarlen e para o parâmetro ODBC bcp_bindcbData são interpretados de maneiras diferentes.

    Condição indicada

    Valor DB-Library varlen

    Valor ODBC cbData

    Valores nulos fornecidos

    0

    -1 (SQL_NULL_DATA)

    Dados de variável fornecidos

    -1

    -10 (SQL_VARLEN_DATA)

    Cadeia binária ou de caracteres de comprimento zero

    NA

    0

    Em DB-Library, um valor varlen de -1 indica que estão sendo fornecidos dados de comprimento variável, o que no ODBC cbData significa que somente valores NULL estão sendo fornecidos. Altere qualquer especificação DB-Library varlen de -1 para SQL_VARLEN_DATA e qualquer especificação varlen de 0 para SQL_NULL_DATA.

  • O DB-Library bcp_colfmtfile_collen e o ODBC bcp_colfmtcbUserData têm o mesmo problema que os parâmetros bcp_bindvarlen e cbData citados acima. Altere qualquer especificação DB-Library file_collen de -1 para SQL_VARLEN_DATA e qualquer especificação file_collen de 0 para SQL_NULL_DATA.

  • O parâmetro iValue da função ODBC bcp_control é um ponteiro void. Em DB-Library, iValue era um inteiro. Converta os valores do ODBC iValue em void *.

  • A opção BCPMAXERRS de bcp_control especifica quantas linhas individuais podem ter erros antes que uma operação de cópia em massa falhe. O padrão de BCPMAXERRS é 0 (falha no primeiro erro) na versão DB-Library de bcp_control e 10 na versão ODBC. Os aplicativos DB-Library que dependem do padrão de 0 para finalizar uma operação de cópia em massa devem ser alterados para chamar o ODBC bcp_control a fim de definir BCPMAXERRS como 0.

  • A função ODBC bcp_control oferece suporte às opções a seguir, que não têm suporte na versão DB-Library de bcp_control:

    • BCPODBC

      Quando definido como TRUE, especifica que os valores datetime e smalldatetime salvos em formato de caractere terão o prefixo e o sufixo de seqüência de escape de carimbo de data/hora ODBC. Isso se aplica apenas a operações BCP_OUT.

      Com BCPODBC definido como FALSE, um valor datetime convertido em uma cadeia de caracteres será produzido como:

      1997-01-01 00:00:00.000
      

      Com BCPODBC definido como TRUE, o mesmo valor datetime é produzido como:

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

      Quando definido como TRUE, especifica que as funções de cópia em massa inserem valores de dados fornecidos para colunas com restrições de identidade. Se essa opção não for definida, novos valores de identidade serão gerados para as linhas inseridas.

    • BCPHINTS

      Especifica várias otimizações de cópia em massa. Essa opção não pode ser usada na versão 6.5 nem em versões anteriores do SQL Server.

    • BCPFILECP

      Especifica a página de código do arquivo de cópia em massa.

    • BCPUNICODEFILE

      Especifica que um arquivo de cópia em massa em modo de caractere é um arquivo Unicode.

  • A função ODBC bcp_colfmt não oferece suporte ao indicador file_type de SQLCHAR porque entra em conflito com o typedef ODBC SQLCHAR. Em vez disso, use SQLCHARACTER para bcp_colfmt.

  • Nas versões ODBC das funções de cópia em massa, o formato para trabalhar com os valores datetime e smalldatetime em cadeias de caracteres é o formato ODBC de aaaa-mm-dd hh:mm:ss.sss; os valores smalldatetime usam o formato ODBC de aaaa-mm-dd hh:mm:ss.

    As versões DB-Library das funções de cópia em massa aceitam valores datetime e smalldatetime em cadeias de caracteres com vários formatos:

    • O formato padrão é mmm dd aaaa hh:mmxx, onde xx é AM ou PM.

    • Cadeias de caracteres datetime e smalldatetime em qualquer formato aceito pela função DB-Library dbconvert.

    • Quando a caixa Usar configurações internacionais estiver marcada na guia Opções DB-Library do SQL Server Client Network Utility, as funções DB-Library de cópia em massa também aceitarão datas no formato de data regional definido para a configuração de localidade do registro do computador cliente.

    As funções DB-Library de cópia em massa não aceitam os formatos datetime e smalldatetime do ODBC.

    Se o atributo da instrução SQL_SOPT_SS_REGIONALIZE estiver definido como SQL_RE_ON, as funções de cópia em massa do ODBC aceitarão datas no formato de data regional definido para a configuração de localidade do registro do computador cliente.

  • Na saída de valores money em formato de caractere, as funções ODBC de cópia em massa fornecem quatro dígitos de precisão, sem separadores de vírgula; as versões DB-Library fornecem apenas dois dígitos de precisão e incluem os separadores de vírgula.