Udostępnij za pośrednictwem


bcp_bind

Wiąże danych z programu zmienna tabela kolumna kopiowanie masowe do SQL Server.

Składnia

RETCODE bcp_bind (
        HDBC hdbc, 
        LPCBYTE pData,
        INT cbIndicator,
        DBINT cbData,
        LPCBYTE pTerm,
        INT cbTerm,
        INT eDataType,
        INT idxServerCol);

Argumenty

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

  • pData
    Wskaźnik do danych, jest kopiowany.Jeśli eDataType jest TEKST_SQL, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR lub SQLIMAGE, pData może być NULL.Wartooć NULL pData wskazuje, że wartości danych long zostaną wysłane do SQL Server w fragmenty za pomocą bcp_moretext.Użytkownik powinien jedynie zestaw pData wartości null, jeżeli kolumna odpowiadająca pole związanego użytkownika jest kolumna BLOB bcp_bind nie powiedzie się.

    W przypadku wskaźników danych pojawiają się w pamięci bezpośrednio przed danych.PData parametru wskazuje zmienna wskaźnikowa, w tym przypadek i szerokość wskaźnika, cbIndicator parametr jest używany przez kopiowanie masowe danych użytkownika adres poprawnie.

  • cbIndicator
    Jest długością w bajtach długość lub null wskaźnika dla kolumna danych.Nieprawidłowy wskaźnik długość wartości to 0 (używając żaden wskaźnik), 1, 2, 4 lub 8.Wskaźniki pojawiają się w pamięci bezpośrednio przed żadnych danych.Na przykład następująca definicja typu Struktura można wstawić wartości całkowitych do SQL Server tabela z użyciem kopiowanie masowe:

    typedef struct tagBCPBOUNDINT
        {
        int iIndicator;
        int Value;
        } BCPBOUNDINT;
    

    przypadek przykład pData byłoby parametr zestaw adres deklarowanych wystąpienie struktury adresu BCPBOUNDINT iIndicator Członkowskie struktury.CbIndicator byłoby parametr zestaw do rozmiaru całkowitą (sizeof(int)) i cbData ponownie byłoby parametr zestaw rozmiar liczby całkowitej (sizeof(int)).Wartość wiersza do serwera, zawierające wartość NULL dla kolumna związana wartości wystąpienie kopiowania iIndicator Członkowskich powinna być zestaw do SQL_NULL_DATA.

  • cbData
    To liczba bajtów danych w zmiennej program, nie włączając długość wskaźnik długości lub wartość null lub terminator.

    Ustawienie cbData do SQL_NULL_DATA oznacza, że wszystkie wiersze skopiowane na serwer zawierają wartości NULL kolumna.

    Ustawienie cbData do SQL_VARLEN_DATA wskazuje, że system użyje terminator ciąg lub skopiowane z innej metoda, aby określić długość danych.

    Dla typów danych o stałej długości, takie jak liczby całkowite typ danych wskazuje długość danych do systemu.Dlatego dla typów danych o stałej długości cbData można bezpiecznie SQL_VARLEN_DATA lub długość danych.

    Dla SQL Server znak i typy danych binarnych, cbData może być SQL_VARLEN_DATA, SQL_NULL_DATA, niektóre wartości dodatnie lub 0.Jeśli cbData jest SQL_VARLEN_DATA, system używa wskaźnika długości i null (jeśli istnieją) lub sekwencji terminatora, aby określić długość danych.Jeśli oba dostarczone, system używa jeden z wyniki w ilości co najmniej kopiowanych danych.Jeśli cbData jest SQL_VARLEN_DATA, typ danych kolumna jest SQL Server znak lub Typ binarny i wskaźnik długości ani sekwencji terminatora jest określony, system zwróci komunikat o błędzie.

    Jeśli cbData ma wartość 0 lub wartość dodatnią, system używa cbData jako długość danych.Jednakże, jeżeli oprócz dodatnią cbData wartość, pod warunkiem że długość sekwencji wskaźnik lub końcówkę, system Określa długość danych za pomocą metoda, wyniki co najmniej kwota kopiowane dane.

    CbData liczba bajtów danych reprezentuje wartość parametru.Jeśli dane znak jest reprezentowany przez szerokości znaków Unicode, a następnie dodatnią cbData wartość parametru reprezentuje liczbę znaków, pomnożonej przez rozmiar w bajtach każdego znaku.

  • pTerm
    Jest wskaźnik do wzorca bajt, jeśli oznacza koniec tej zmiennej program.Ciągi znaków ANSI i MBCS C mają zwykle terminator 1-bajtowy (\0).

    Jeśli nie ma żadnych terminator dla zmiennej, zestaw pTerm wartości null.

    Można użyć ciąg pusty ("") aby wyznaczyć c null terminator zmiennej program terminator.Ponieważ pusty ciąg zakończony znakiem null stanowi pojedynczy bajt (terminator bajt sam), zestaw cbTerm 1.Na przykład, aby wskazać, że ciąg w szName jest zakończony znakiem null i że terminator powinna być używana do wskazania długość:

    bcp_bind(hdbc, szName, 0,
       SQL_VARLEN_DATA, "", 1,
       SQLCHARACTER, 2)
    

    Nonterminated formularza w tym przykładzie może wskazywać kopiowane z 15 znaków szName zmiennej drugi kolumna powiązania tabela:

    bcp_bind(hdbc, szName, 0, 15, 
       NULL, 0, SQLCHARACTER, 2)
    

    kopiowanie masowe API wykonuje konwersję znaków Unicode do MBCS wymagane.Upewnij się, że ciąg bajt terminator i długość ciągu bajt są zestaw poprawnie.Na przykład, aby wskazać, że ciąg w szName jest ciągiem znak dwubajtowy Unicode zakończone przez wartość null terminator Unicode:

    bcp_bind(hdbc, szName, 0, 
       SQL_VARLEN_DATA, L"",
       sizeof(WCHAR), SQLNCHAR, 2)
    

    Jeśli to granica SQL Server kolumna jest znak dwubajtowy, konwersja nie jest wykonywana na bcp_sendrow.Jeśli SQL Server kolumna ma typ znaków MBCS znak dwubajtowy do znaków wielobajtowych konwersji jest prowadzone, jak dane są przesyłane do SQL Server.

  • cbTerm
    To liczba bajtów obecnych w terminator dla zmiennej program ewentualne.Jeśli nie ma żadnych terminator dla zmiennej, zestaw cbTerm na 0.

  • eDataType
    Jest to typ danych c zmiennej program.Dane w zmiennej program zostanie przekonwertowany na typ kolumna bazy danych.Jeśli ten parametr jest równy 0, jest wykonywane bez konwersji.

    EDataType parametr jest wyliczana przez SQL Server tokenów typu danych w sqlncli.h, nie ODBC C danych typu moduły wyliczające.Na przykład można określić całkowitą dwubajtowy, ODBC wpisz SQL_C_SHORT, za pomocą SQL Server-określonego typu SQLINT2.

    SQL Server 2005wprowadzone obsługę SQLXML i SQLUDT tokenów typu danych w eDataType paramenter.

  • idxServerCol
    Jest numerem porządkowym kolumna w tabela bazy danych, do której dane są kopiowane.Pierwsza kolumna w tabela to kolumna 1.Pozycja porządkowa kolumna jest zgłaszane przez SQLColumns.

Zwraca

POMYŚLNIE lub nie powiedzie się.

Uwagi

Użyj bcp_bind dla szybki i wydajny sposób skopiować dane z programu zmienna do tabela w SQL Server.

Wywołanie bcp_init przed wywołaniem to lub wszelkich innych bulk copy funkcja.Wywołanie bcp_init ustawia SQL Server tabela miejsce docelowe dla kopiowanie masowe.When calling bcp_init for use with bcp_bind and bcp_sendrow, the bcp_initszDataFile parameter, indicating the data file, is set to NULL; the bcp_initeDirection parameter is set to DB_IN.

Utworzyć osobne bcp_bind wywołanie każdej kolumna w SQL Server tabela, do której chcesz kopii.Po niezbędnych bcp_bind wywołania zostały dokonane, a następnie wywołać bcp_sendrow wysłać wiersz danych z zmienne program SQL Server.Ponownego wiązania kolumna nie jest obsługiwane.

W dowolnym momencie SQL Server do zatwierdzanie wiersze otrzymał, wywołanie bcp_batch.Na przykład wywołanie bcp_batch raz na każde 1000 wiersze wstawione lub w innych odstępach czasu.

Gdy nie ma więcej wierszy do wstawienia, call bcp_done.Niewykonanie tego wyniki w błąd.

Kontrolować ustawienia parametru, z bcp_control, nie mają wpływu na bcp_bind wiersz przesunięcia.

Jeśli pData dla kolumna jest zestaw na wartość NULL, ponieważ jego wartość będzie dostarczone przez wywołania bcp_moretext, kolejnych kolumn z eDataType zestaw do TEKST_SQL, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR lub SQLIMAGE musi być związany także z pData zestaw NULL, i ich wartości muszą być również dostarczane przez wywołania bcp_moretext.

Dla nowych typów dużą wartość takich jak varchar(max), varbinary(max), lub nvarchar(max), SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY i SQLNCHAR można używać jako typ wskaźników w eDataType parametru.

Jeśli cbTerm jest nie 0 dowolną wartość (1, 2, 4 lub 8) jest prawidłowy dla prefiksu (cbIndicator).W tej sytuacji SQL Server Native Client będzie wyszukiwać terminator, obliczyć długość danych w odniesieniu do terminator (i), i zestaw cbData do mniejszej wartości i i wartość prefiksu.

Jeśli cbTerm 0 i cbIndicator (przedrostkowo) nie jest 0, cbIndicator musi być 8.Prefiks 8 bajtów może przyjmować następujące wartości:

  • 0xFFFFFFFFFFFFFFFF oznacza wartość null dla pole

  • 0xFFFFFFFFFFFFFFFE jest traktowana jako wartość specjalny prefiks używany dla wydajne przesyłanie danych w fragmentów do serwera.Format danych to specjalny prefiks jest:

  • <SPECIAL_PREFIX> <0 or more DATA CHUNKS> <ZERO_CHUNK> where:

  • SPECIAL_PREFIX jest 0xFFFFFFFFFFFFFFFE

  • DATA_CHUNK jest prefiks 4-bajtowy zawierające długość fragment następuje rzeczywiste dane, których długość jest określona w 4-bajtowy prefiks.

  • ZERO_CHUNK jest wartość 4-bajtowy zawierające zera (00000000) wskazujący koniec danych.

  • Inne długość nieprawidłowy bajt 8 jest traktowana jako długość regularnych danych.

Wywołanie bcp_columns podczas korzystania z bcp_bind wyniki w błąd.

bcp_bind obsługa Enhanced Data i czas funkcje

Informacje dotyczące typów używanych z eDataType parametru data /czas typów, zobacz Zmiany kopii zbiorczego dla typów Enhanced Data/Godzina (OLE DB i ODBC).

Aby uzyskać więcej informacji, zobacz Data/Godzina ulepszenia (ODBC).

Przykład

#include sql.h
#include sqlext.h
#include odbcss.h
// Variables like henv not specified.
HDBC      hdbc;
char         szCompanyName[MAXNAME];
DBINT      idCompany;
DBINT      nRowsProcessed;
DBBOOL      bMoreData;
char*      pTerm = "\t\t";

// Application initiation, get an ODBC environment handle, allocate the
// hdbc, and so on.
... 

// Enable bulk copy prior to connecting on allocated hdbc.
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,
   SQL_IS_INTEGER);

// Connect to the data source; return on error.
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))
   {
   // Raise error and return.
   return;
   }

// Initialize bcp. 
if (bcp_init(hdbc, "comdb..accounts_info", NULL, NULL
   DB_IN) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Bind program variables to table columns. 
if (bcp_bind(hdbc, (LPCBYTE) &idCompany, 0, sizeof(DBINT), NULL, 0,
   SQLINT4, 1)    == FAIL)
   {
   // Raise error and return.
   return;
   }
if (bcp_bind(hdbc, (LPCBYTE) szCompanyName, 0, SQL_VARLEN_DATA,
   (LPCBYTE) pTerm, strnlen(pTerm, sizeof(pTerm)), SQLCHARACTER, 2) == FAIL)
   {
   // Raise error and return.
   return;
   }

while (TRUE)
   {
   // Retrieve and process program data. 
   if ((bMoreData = getdata(&idCompany, szCompanyName)) == TRUE)
      {
      // Send the data. 
      if (bcp_sendrow(hdbc) == FAIL)
         {
         // Raise error and return.
         return;
         }
      }
   else
      {
      // Break out of loop.
      break;
      }
   }

// Terminate the bulk copy operation.
if ((nRowsProcessed = bcp_done(hdbc)) == -1)
   {
   printf_s("Bulk-copy unsuccessful.\n");
   return;
   }

printf_s("%ld rows copied.\n", nRowsProcessed);

Zobacz także

Odwołanie