Share via


Convertir un programa de copia masiva de DB-Library a ODBC

Convertir un programa de copia masiva de DB-Library a ODBC es fácil porque las funciones de copia masiva compatibles con el controlador ODBC de SQL Server Native Client son similares a las funciones de copia masiva de DB-Library, con las siguientes excepciones:

  • Las aplicaciones DB-Library pasan un puntero a una estructura DBPROCESS como primer parámetro de las funciones de copia masiva. En las aplicaciones ODBC, el puntero a DBPROCESS se reemplaza por un identificador de conexión ODBC.

  • Las aplicaciones DB-Library llaman a BCP_SETL antes de conectarse para habilitar las operaciones de copia masiva en DBPROCESS. Las aplicaciones ODBC llaman en su lugar a SQLSetConnectAttr antes de conectarse para habilitar las operaciones masivas en un identificador de conexión:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);
    
  • El controlador ODBC de SQL Server Native Client no admite controladores de mensajes y errores de DB-Library; es necesario llamar a SQLGetDiagRec para obtener los errores y mensajes generados por las funciones de copia masiva de ODBC. Las versiones ODBC de las funciones de copia masiva devuelven los códigos de retorno de copia masiva estándar, es decir, SUCCEED o FAILED, no códigos de retorno de estilo ODBC, como SQL_SUCCESS o SQL_ERROR.

  • Los valores especificados para el parámetro varlen de bcp_bind de DB-Library se interpretan de forma distinta que el parámetro cbData de bcp_bind de ODBC.

    Condición indicada

    Valor de varlen de DB-Library

    Valor de cbData de ODBC

    Se suministraron valores NULL

    0

    -1 (SQL_NULL_DATA)

    Se suministraron datos variables

    -1

    -10 (SQL_VARLEN_DATA)

    Cadena binaria o carácter de longitud cero

    N/D

    0

    En DB-Library, un valor de varlen de -1 indica que se han suministrado datos de longitud variable, mientras que en cbData de ODBC se interpreta que sólo se han suministrado valores NULL. Cambie todas las especificaciones de varlen de DB-Library de -1 a SQL_VARLEN_DATA y todas las especificaciones de varlen de 0 a SQL_NULL_DATA.

  • file_collen de bcp_colfmt de DB-Library y cbUserData de bcp_colfmt de ODBC tienen el mismo problema que los parámetros varlen y cbData de bcp_bind indicados anteriormente. Cambie todas las especificaciones de file_collen de DB-Library de -1 a SQL_VARLEN_DATA y todas las especificaciones de file_collen de 0 a SQL_NULL_DATA.

  • El parámetro iValue de la función bcp_control de ODBC es un puntero void. En DB-Library, iValue era un entero. Convierta los valores para que iValue de ODBC sea void*.

  • La opción BCPMAXERRS de bcp_control especifica cuántas filas individuales pueden tener errores antes de que se produzcan errores en una operación de copia masiva. El valor predeterminado para BCPMAXERRS es 0 (error al primer error) en la versión DB-Library de bcp_control y 10 en la versión ODBC. Las aplicaciones DB-Library que dependen del valor predeterminado 0 para finalizar una operación de copia masiva deben modificarse para llamar a bcp_control de ODBC a fin de establecer BCPMAXERRS en 0.

  • La función bcp_control de ODBC admite las opciones que se indican a continuación, que no se admiten en la versión DB-Library de bcp_control:

    • BCPODBC

      Cuando se establece en TRUE, especifica que los valores datetime y smalldatetime guardados en formato de caracteres tendrán el prefijo y el sufijo de secuencia de escape de marca de tiempo de ODBC. Esto sólo se aplica a las operaciones BCP_OUT.

      Con BCPODBC establecido en FALSE, un valor datetime convertido en una cadena de caracteres devuelve el siguiente resultado:

      1997-01-01 00:00:00.000
      

      Con BCPODBC establecido en TRUE, el mismo valor datetime devuelve el siguiente resultado:

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

      Cuando se establece en TRUE, especifica que las funciones de copia masiva deben insertar valores de datos suministrados para las columnas con restricciones de identidad. Si no se establece, se generan nuevos valores de identidad para las filas insertadas.

    • BCPHINTS

      Especifica diversas optimizaciones de copia masiva. Esta opción no puede usarse en la versión 6.5 ni en versiones anteriores de SQL Server.

    • BCPFILECP

      Especifica la página de códigos del archivo de copia masiva.

    • BCPUNICODEFILE

      Especifica que un archivo de copia masiva en modo de carácter es un archivo Unicode.

  • La función bcp_colfmt de ODBC no admite el indicador file_type de SQLCHAR porque entra en conflicto con la definición de tipos SQLCHAR de ODBC. Use en su lugar SQLCHARACTER para bcp_colfmt.

  • En las versiones ODBC de las funciones de copia masiva, el formato para trabajar con valores datetime y smalldatetime en cadenas de caracteres es el formato aaaa-mm-dd hh:mm:ss.sss de ODBC; los valores smalldatetime utilizan el formato aaaa-mm-dd hh:mm:ss de ODBC.

    Las versiones DB-Library de las funciones de copia masiva aceptan valores datetime y smalldatetime en cadenas de caracteres que usan varios formatos:

    • El formato predeterminado es mmm dd aaaa hh:mmxx, donde xx es AM o PM.

    • Cadenas de caracteres datetime y smalldatetime en cualquier formato compatible con la función dbconvert de DB-Library.

    • Cuando se activa la casilla Usar configuración internacional de la ficha Opciones de DB-Library de la Herramienta de red de cliente de SQL Server, las funciones de copia masiva de DB-Library también aceptan las fechas en el formato de fecha regional definido para la configuración regional del Registro del equipo cliente.

    Las funciones de copia masiva de DB-Library no aceptan los formatos datetime y smalldatetime de ODBC.

    Si el atributo SQL_SOPT_SS_REGIONALIZE de la instrucción está establecido en SQL_RE_ON, las funciones de copia masiva de ODBC aceptan fechas en el formato de fecha regional definido para la configuración regional del Registro del equipo cliente.

  • Al generar valores de tipo money en formato de caracteres, las funciones de copia masiva de ODBC proporcionan cuatro dígitos de precisión y ningún separador de millares; las versiones DB-Library sólo proporcionan dos dígitos de precisión e incluyen los separadores de millares.