Share via


IBCPSession::BCPInit (OLE DB)

Inicializa la estructura de copia masiva, realiza algunas comprobaciones de errores, comprueba que los datos y los nombres de archivo de formato son correctos y, a continuación, los abre.

Sintaxis

HRESULT BCPInit( 
      const wchar_t *pwszTable,
      const wchar_t *pwszDataFile,
      const wchar_t *pwszErrorFile,
      int eDirection);

Comentarios

Se debe llamar al método BCPInit antes de llamar a cualquier otro método de copia masiva. El método BCPInit realiza las inicializaciones necesarias para una copia masiva de datos entre la estación de trabajo y SQL Server.

El método BCPInit examina la estructura del origen de base de datos o la tabla de destino, no el archivo de datos. Especifica los valores de formato de datos del archivo de datos basándose en cada columna de la tabla de base de datos, la vista o el conjunto de resultados de la instrucción SELECT. Esta especificación incluye el tipo de datos de cada columna, la presencia o ausencia de cadenas de bytes de un indicador de longitud o nulo y de terminador en los datos, y el ancho de los tipos de datos de longitud fija. El método BCPInit establece estos valores como sigue:

  • El tipo de datos especificado es el de la columna de la tabla de base de datos, la vista o el conjunto de resultados de la instrucción SELECT. El tipo de datos es enumerado por tipos de datos nativos de SQL Server especificados en el archivo de encabezado de SQL Server Native Client (sqlncli.h). Sus valores están en el modelo de BCP_TYPE_XXX. Los datos están representados en el formato del equipo. Es decir, los datos de una columna de tipo de datos entero están representados por una secuencia de cuatro bytes "big endian" o "little endian" basada en el equipo que creó el archivo de datos.

  • Si un tipo de datos de base de datos es de longitud fija, los datos del archivo de datos también serán de longitud fija. Los métodos de copia masiva que procesan los datos (por ejemplo, IBCPSession::BCPExec) analizan las filas de datos esperando que la longitud de los datos del archivo de datos sea idéntica a la longitud de los datos especificados en la tabla de base de datos, la vista o la lista de columnas de la instrucción SELECT. Por ejemplo, los datos de una columna de base de datos definidos como char(13) deben estar representados por 13 caracteres por cada fila de datos del archivo. Los datos de longitud fija pueden ir precedidos de un indicador nulo si la columna de base de datos permite valores NULL.

  • Cuando se copian datos en SQL Server, el archivo de datos debe tener datos para cada columna de la tabla de base de datos. Cuando se copian datos de SQL Server, los datos de todas las columnas de la tabla de base de datos, la vista o el conjunto de resultados de la instrucción SELECT se copian en el archivo de datos.

  • Cuando se copian datos en SQL Server, la posición ordinal de una columna en el archivo de datos debe ser idéntica a la de la columna en la tabla de base de datos. Cuando se copian datos de SQL Server, el método BCPExec coloca los datos basándose en la posición ordinal de la columna en la tabla de base de datos.

  • Si un tipo de datos de base de datos es de longitud variable (por ejemplo, varbinary(22)) o si una columna de base de datos puede contener valores NULL, se antepone a los datos del archivo de datos un indicador de longitud o nulo. El ancho del indicador varía dependiendo del tipo de datos y de la versión de copia masiva. La opción BCP_OPTION_FILEFMT del método IBCPSession::BCPControl proporciona compatibilidad entre los archivos de datos de copia masiva anteriores y los servidores en que se ejecutan versiones posteriores de SQL Server indicando cuándo el ancho de los indicadores de los datos es inferior a lo esperado.

Nota

Para cambiar los valores de formato de datos especificados para un archivo de datos, utilice los métodos IBCPSession::BCPColumns e IBCPSession::BCPColFmt.

Las copias masivas en SQL Server se pueden optimizar para las tablas que no contienen índices estableciendo la opción de base de datos select into/bulkcopy.

Argumentos

  • pwszTable[in]
    Nombre de la tabla de base de datos en o de la que se va a copiar. El nombre puede incluir el nombre de la base de datos o el nombre del propietario. Por ejemplo, "pubs.username.titles", "pubs..titles", "username.titles".

    Si el argumento eDirection está establecido en BCP_DIRECTION_OUT, el argumento pwszTable puede ser el nombre de una vista de base de datos.

    Si el argumento eDirection está establecido en BCP_DIRECTION_OUT y se especifica una instrucción SELECT utilizando el método BCPControl antes de llamar al método BCPExec, el argumento pwszTable debe estar establecido en NULL.

  • pwszDataFile[in]
    Nombre del archivo de usuario en o del que se va a copiar.

  • pwszErrorFile[in]
    Nombre del archivo de error que se va a rellenar con mensajes de progreso, mensajes de error y copias de las filas que, por cualquier razón, no se puedan copiar de un archivo de usuario en una tabla. Si el argumento pwszErrorFile está establecido en NULL, no se utiliza ningún archivo de error.

  • eDirection[in]
    Dirección de la operación de copia, BCP_DIRECTION_IN o BCP_DIRECTION_OUT. BCP_DIRECTION_IN indica una copia de un archivo de usuario en una tabla de base de datos; BCP_DIRECTION_OUT indica una copia de una tabla de base de datos en un archivo de usuario.

Valores de código de retorno

  • S_OK
    El método se ejecutó correctamente.

  • E_FAIL
    Se produjo un error específico del proveedor; para obtener información detallada, use la interfaz ISQLServerErrorInfo.

  • E_OUTOFMEMORY
    Error de memoria insuficiente.

  • E_INVALIDARG
    No se han especificado correctamente uno o varios argumentos. Por ejemplo, se proporcionó un nombre de archivo no válido.

Vea también

Conceptos

Otros recursos