Compartir por


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

Se aplica a: SQL Server Azure SQL Database Azure SQL Instancia administrada Azure Synapse Analytics Analytics Platform System (PDW)

La conversión de un programa de copia masiva de la biblioteca de bases de datos en 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 la biblioteca de bases de datos, 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 de biblioteca de bases de datos llaman a BCP_SETL antes de conectarse para habilitar operaciones de copia masiva en un DBPROCESS. En su lugar, las aplicaciones ODBC llaman 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 errores y mensajes de la biblioteca de base de datos; Debe llamar a SQLGetDiagRec para obtener errores y mensajes generados por las funciones de copia masiva 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 DB-Library bcp_bindvarlen se interpretan de forma diferente al parámetro ODBC bcp_bindcbData.

    Condición indicada Valor varlen de la biblioteca de base de datos Valor 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 varlen de -1 indica que se proporcionan datos de longitud variable, que en ODBC cbData se interpreta para significar que solo se proporcionan valores NULL. Cambie las especificaciones varlen de db-Library de -1 a SQL_VARLEN_DATA y las especificaciones varlen de 0 a SQL_NULL_DATA.

  • La bcp_colfmt db-library file_collen y odbc bcp_colfmtcbUserData tienen el mismo problema que los parámetros varlen y cbData de bcp_bindindicados anteriormente. Cambie las especificaciones de file_collen db-Library de -1 a SQL_VARLEN_DATA y las especificaciones de file_collen de 0 a SQL_NULL_DATA.

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

  • La opción bcp_control BCPMAXERRS especifica cuántas filas individuales pueden tener errores antes de que se produzca un error en una operación de copia masiva. El valor predeterminado para BCPMAXERRS es 0 (error en el primer error) en la versión de biblioteca de bases de datos de bcp_control y 10 en la versión ODBC. Las aplicaciones db-library que dependen del valor predeterminado de 0 para finalizar una operación de copia masiva deben cambiarse para llamar al bcp_control ODBC para establecer BCPMAXERRS en 0.

  • La función ODBC bcp_control admite las siguientes opciones no admitidas por la versión de biblioteca de bases de datos 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 ODBC. Esto solo se aplica a las operaciones BCP_OUT.

      Con BCPODBC establecido en FALSE, se genera un valor datetime convertido en una cadena de caracteres como:

      1997-01-01 00:00:00.000  
      

      Con BCPODBC establecido en TRUE, se genera el mismo valor datetime que:

      {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 se puede usar en la versión 6.5 o 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 ODBC bcp_colfmt no admite el indicador de file_type de SQLCHAR porque entra en conflicto con la definición de tipo ODBC SQLCHAR. Use SQLCHARACTER en su lugar 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 ODBC de aaaa-mm-dd hh:mm:ss.sss; Los valores smalldatetime usan el formato ODBC de aaaa-mm-dd hh:mm:ss.

    Las versiones de db-Library de las funciones de copia masiva aceptan valores datetime y smalldatetime en cadenas de caracteres con 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 la biblioteca de bases de datos.

    • Cuando se activa la casilla Usar configuración internacional en la pestaña Opciones de biblioteca de base de datos de la Utilidad de red de cliente de SQL Server, las funciones de copia masiva de la biblioteca de bases de datos también aceptan fechas en el formato de fecha regional definido para la configuración regional del registro del equipo cliente.

    Las funciones de copia masiva 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 money en formato de caracteres, las funciones de copia masiva ODBC proporcionan cuatro dígitos de precisión y ningún separador de comas; Las versiones de db-Library solo proporcionan dos dígitos de precisión e incluyen los separadores de comas.

Consulte también

Realizar operaciones de copia masiva (ODBC)
Funciones de copia masiva