Udostępnij za pośrednictwem


bcp_init

Inicjuje operację kopiowanie masowe.

Składnia

RETCODE bcp_init (
        HDBC hdbc,
        LPCTSTR szTable,
        LPCTSTR szDataFile,
        LPCTSTR szErrorFile,
        INT eDirection);

Argumenty

  • hdbc
    Jest kopiowanie masowe-włączone dojścia połączenia ODBC.

  • szTable
    Jest to nazwa tabela bazy danych, które mają być kopiowane do lub z.Nazwa ta może również zawierać nazwy bazy danych lub właściciel.Na przykład pubs.gracie.titles, pubs.tytuły, gracie.titles, i tytuły są wszystkie nazwy tabela prawnych.

    Jeśli eDirection jest DB_OUT, szTable może być również nazwę widoku bazy danych.

    If eDirection is DB_OUT and a SELECT statement is specified using bcp_control before bcp_exec is called, bcp_initszTable must be set to NULL.

  • szDataFile
    Jest to nazwa pliku użytkownika mają być kopiowane do lub z.Jeśli dane zostanie skopiowana bezpośrednio z zmiennych za pomocą bcp_sendrow, zestaw szDataFile wartości null.

  • szErrorFile
    Jest to nazwa pliku błędu wypełniona postęp wiadomości, komunikaty o błędach i kopiuje wszystkie wiersze, które z jakiegoś powodu nie można skopiować pliku użytkownika do tabela.Jeśli wartość NULL jest przekazywany jako szErrorFile, jest używany nie błąd pliku.

  • eDirection
    Wskazuje kierunek kopii, DB_IN lub DB_OUT.DB_IN wskazuje kopiowanie z zmiennych program lub plik użytkownika do tabela.DB_OUT wskazuje kopiowanie z tabela bazy danych do pliku użytkownika.Należy określić nazwę pliku użytkownika z DB_OUT.

Zwraca

POMYŚLNIE lub nie powiedzie się.

Uwagi

Call bcp_init before calling any other bulk-copy function.bcp_init performs the necessary initializations for a bulk copy of data between the workstation and SQL Server.

Bcp_init musi posiadać dojścia połączenia ODBC, używa funkcja kopiowanie masowe funkcja.Aby włączyć uchwyt, użyj SQLzestawConnectAttr z SQL_COPT_SS_BCP zestaw do SQL_BCP_ON na dojście do połączenia przydzielonego, ale nie połączono.Próby przypisać atrybut połączony uchwyt wyniki w błąd.

When a data file is specified, bcp_init examines the structure of the database source or target table, not the data file.bcp_init specifies data format values for the data file based on each column in the database table, view, or SELECT result set.This specification includes the data type of each column, the presence or absence of a length or null indicator and terminator byte strings in the data, and the width of fixed-length data types.bcp_init sets these values as follows:

  • Określony typ danych jest typ danych kolumna w tabela bazy danych, widok lub zestaw wyników wybierz.Typ danych jest wyliczana przez SQL Server macierzyste typy danych określonych w sqlncli.h.Same dane jest reprezentowany w postaci komputera.Oznacza to, że dane z kolumna całkowitą typ danych jest reprezentowane przez sekwencję czterech bajtów big-little-endian lub oparte na komputerze, na którym utworzono plik danych.

  • Typ danych bazy danych jest stałej długości, plik danych również jest stała długość.Funkcje masowego kopiowania, które przetwarzają dane (na przykład bcp_exec) analizy Oczekiwana długość danych w pliku danych identyczne długość danych określonych w tabela bazy danych, widoku lub kolumna listy wierszy danych.Na przykład dane dla kolumna bazy danych, określone jako char(13) musi być reprezentowana przez 13 znaków dla każdego wiersza danych w pliku.O stałej długości danych może być prefiksem wskaźnik null jeśli zezwala na wartości null kolumna bazy danych.

  • Po zdefiniowaniu sekwencji terminatora bajt długości sekwencji terminatora bajt jest zestaw na 0.

  • Podczas kopiowania do SQL Server, plik danych musi mieć dane dla każdej kolumna w tabela bazy danych.Podczas kopiowania z SQL Server, dane ze wszystkich kolumn w tabela bazy danych, widoku lub zestaw wyników wybierz są kopiowane do pliku danych.

  • Podczas kopiowania do SQL Server, Pozycja porządkowa w pliku danych kolumna muszą być identyczne z numerem porządkowym kolumna w tabela bazy danych.Podczas kopiowania z SQL Server, bcp_exec umieszcza dane oparte na pozycji porządkowej kolumna w tabela bazy danych.

  • Jeśli typ danych bazy danych jest zmiennej długości (na przykład varbinary(22)) lub jeśli kolumna bazy danych może zawierać wartości null, wskaźnik długości i null zawiera dane w pliku danych.Szerokość wskaźnika zależy od typu danych i wersja kopiowanie masowe.

Aby zmienić wartości format danych określony dla pliku danych, należy wywołać bcp_columns i bcp_colfmt.

Luzem kopii SQL Server można zoptymalizować dla tabel, które nie zawierają indeksy przez ustawienie bazy danych model odzyskiwanie proste lub BULK_LOGGEDAby uzyskać więcej informacji, zobacz Optymalizacja wydajności importu zbiorczego i ALTER DATABASE.

Jeśli plik danych nie jest używany, należy wywołać bcp_bind , aby określić format i lokalizacji w pamięci fsor danych każdej kolumna, następnie skopiowanie wierszy danych SQL Server za pomocą bcp_sendrow.

Przykład

W tym przykładzie przedstawiono sposób użycia funkcja ODBC bcp_init przy użyciu plik formatu.

Przed skompilować i uruchomić kod języka C++, należy wykonać następujące czynności:

  • Utwórz źródło danych ODBC, o nazwie Test.To źródło danych można skojarzyć z dowolnej bazy danych.

  • Uruchom następujące polecenie w Transact-SQL na bazie danych:

    CREATE TABLE BCPDate (cola int, colb datetime)
    
  • Dodać plik o nazwie Bcpfmt.fmt w katalogu, gdzie będzie uruchomić aplikację i dodać ten plik:

    8.0
    2
    1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin
    2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin
    
  • Dodać plik o nazwie Bcpodbc.bcp w katalogu, gdzie będzie uruchomić aplikację i dodać ten plik:

    1
    2
    

Teraz można przystąpić do kompilowania i uruchamiania kodu C++.

// compile with: odbc32.lib sqlncli10.lib
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>

SQLHENV henv = SQL_NULL_HENV;
HDBC hdbc1 = SQL_NULL_HDBC; 

void Cleanup() {
   if (hdbc1 != SQL_NULL_HDBC) {
      SQLDisconnect(hdbc1);
      SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
   }

   if (henv != SQL_NULL_HENV)
      SQLFreeHandle(SQL_HANDLE_ENV, henv);
}

int main() {
   RETCODE retcode;
   SDWORD cRows;

   // Allocate the ODBC environment and save handle.
   retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
      printf("SQLAllocHandle(Env) Failed\n\n");
      Cleanup();
      return(9);
   }

   // Notify ODBC that this is an ODBC 3.0 app.
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
      printf("SQLSetEnvAttr(ODBC version) Failed\n\n");
      Cleanup();
      return(9);    
   }

   // Allocate ODBC connection handle, set BCP mode, and connect.
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
      printf("SQLAllocHandle(hdbc1) Failed\n\n");
      Cleanup();
      return(9);
   }

   retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
      printf("SQLSetConnectAttr(hdbc1) Failed\n\n");
      Cleanup();
      return(9);
   }

   // Sample uses Integrated Security. Create SQL Server DSN using Windows NT authentication.
   retcode = SQLConnect(hdbc1, (UCHAR*)"Test", SQL_NTS, (UCHAR*)"", SQL_NTS, (UCHAR*)"", SQL_NTS);
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
      printf("SQLConnect() Failed\n\n");
      Cleanup();
      return(9);
   }

   // Initialize the bulk copy.
   retcode = bcp_init(hdbc1, "BCPDate", "BCPODBC.bcp", NULL, DB_IN);
   if ( (retcode != SUCCEED) ) {
      printf("bcp_init(hdbc1) Failed\n\n");
      Cleanup();
      return(9);
   }

   // Read the format file.
   retcode = bcp_readfmt(hdbc1, "BCPFMT.fmt");
   if ( (retcode != SUCCEED) ) {
      printf("bcp_readfmt(hdbc1) Failed\n\n");
      Cleanup();
      return(9);
   }

   // Execute the bulk copy.
   retcode = bcp_exec(hdbc1, &cRows);
   if ( (retcode != SUCCEED) ) {
      printf("bcp_exec(hdbc1) Failed\n\n");
      Cleanup();
      return(9);
   }

   printf("Number of rows bulk copied in = %d.\n", cRows);

   // Cleanup
   SQLDisconnect(hdbc1);
   SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
   SQLFreeHandle(SQL_HANDLE_ENV, henv);
}

Zobacz także

Odwołanie