Udostępnij za pośrednictwem


bcp_bind

Powiązanie danych ze zmiennej program do kolumna tabela dla kopiowanie masowe do SQL Server.

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

Argumenty

  • hdbc
    Czy dojścia połączenia ODBC włączona kopia w zbiorczej.

  • pData
    Czy skopiować wskaźnik do danych.Jeśli eDataType SQLTEXT, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR lub SQLIMAGE jestpData może mieć wartość NULL.WARTOŚĆ NULL pData wskazuje, że wartości długie dane zostaną wysłane do SQL Server w przy użyciu fragmentów bcp_moretext.Użytkownik powinien tylko zestaw pData NULL, jeśli kolumna odpowiadającej użytkownika związane pole jest kolumną BLOB inaczej bcp_bind nie powiedzie się.

    Jeśli wskaźniki znajdują się w danych, są one wyświetlane w pamięci bezpośrednio przed danymi.The pData parameter points to the indicator variable in this przypadek, and the width of the indicator, the cbIndicator parameter, is used by kopiowanie masowe to address user data correctly.

  • cbIndicator
    Jest to, w bajtach wskaźnika długości lub wartość zero dla kolumna danych.Ważny wskaźnik długość wartości to 0 (podczas korzystania z nie wskaźnik), 1, 2, 4 lub 8.Wskaźniki są wyświetlane w pamięci bezpośrednio przed żadnych danych.Na przykład, następująca definicja typu Struktura można użyć do wstawiania wartości całkowitych w SQL Server przy użyciu kopiowanie masowe tabela:

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

    przypadek przykład pData parametr może być zestaw adres deklarowanej wystąpienie struktury adres BCPBOUNDINT iIndicator element członkowski członkowski struktury.The cbIndicator parameter would be zestaw to the size of an integer (sizeof(int)), and the cbData parameter would again be zestaw to the size of an integer (sizeof(int)).Do kopiowania wierszy do serwera, zawierające wartości NULL dla kolumna związanej, wartość w wystąpieniu luzem iIndicator element członkowski członkowski powinna być równa SQL_NULL_DATA.

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

    Ustawienie cbData do SQL_NULL_DATA oznacza, że wszystkie wiersze kopiowany 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, można określić długość danych.

    W przypadku typów danych o stałej długości, takie jak liczby całkowite typ danych wskazuje długość danych do systemu.W związku z tym w wypadku typów danych o stałej długości cbData może być 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 liczby dodatniej lub 0.Jeśli cbData SQL_VARLEN_DATA, system używa ze wskaźnikiem długość/null (jeśli jest obecna) lub sekwencji terminator do określenia długości danych.Jeśli oba dostarczone, system używa tej, która powoduje najmniejszą ilość danych, w której są kopiowane.Jeśli cbData SQL_VARLEN_DATA, typ danych kolumna jest SQL Server określony znak lub Typ binarny i wskaźnik długości ani sekwencji terminator, system zwróci komunikat o błędzie.

    Jeśli cbData jest równa 0 lub wartość dodatnią, system używa cbData jako długość danych.Niemniej jednak, jeśli oprócz dodatnia cbData jest podana wartość sekwencji wskaźnik lub terminator długość, system Określa długość danych przy użyciu metoda, które powoduje najmniejszą ilość danych, w której są kopiowane.

    The cbData parameter value represents the count of bytes of data.Jeśli dane znak jest reprezentowany przez szerokości znaków Unicode, a następnie dodatnia cbData parametr wartość reprezentuje liczbę znaków pomnożona przez rozmiar w bajtach każdego znaku.

  • pTerm
    Jest wskaźnikiem do wzorca bajtu, jeśli oznacza koniec tej zmiennej programu.Na przykład ciągi znaków ANSI i MBCS C zazwyczaj mają terminator 1-bajtowy (\0).

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

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

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

    Forma nonterminated w tym przykładzie może wskazywać, że 15 znaków, można skopiować z szName zmiennej do drugiej kolumna w tabela związanej:

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

    Interfejsu API kopiowanie masowe dokonuje konwersji znaków Unicode do MBCS zgodnie z wymaganiami.Upewnij się, że ciąg bajt terminator i długość ciągu bajt są zestaw poprawnie.Na przykład, aby wskazać, że w ciąg szName jest ciągiem znak dwubajtowy Unicode, została przerwana przez wartości 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 jest typu znak MBCS, znak dwubajtowy do konwersji znaków wielobajtowych odbywa się podczas przesyłania danych 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 to 0.

  • eDataType
    Jest to typ danych C zmiennej programu.Dane w zmiennej program zostanie przekonwertowany na typ kolumna bazy danych.Jeśli ten parametr ma wartość 0, konwersja nie jest wykonywane.

    The eDataType parameter is enumerated by the SQL Server data type tokens in sqlncli.h, not the ODBC C data type enumerators.Na przykład, można określić liczbę całkowitą typu 2 bajtowe, ODBC SQL_C_SHORT, należy wpisać przy użyciu SQL Server-SQLINT2 określonego typu.

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

  • idxServerCol
    Jest to pozycja porządkowa kolumna w tabela bazy danych, do której dane są kopiowane.Pierwsza kolumna w tabela to kolumna 1.Liczba porządkowa położenie kolumna jest zgłaszane przez SQLColumns.

Zwraca wartość

Powiodła się lub zakończyć się NIEPOWODZENIEM.

Remarks

Użycie bcp_bind , aby w szybki i wydajny sposób kopiowanie danych ze zmiennej program do tabela na SQL Server.

Wywołanie bcp_init przed wywołaniem tej lub innej funkcja masowego kopiowania. Wywołanie bcp_init sets the SQL Server tabela miejsce docelowe 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.

Należy oddzielnie bcp_bind wywołanie każdej kolumna w SQL Server Tabela, do którego chcesz skopiować. Po niezbędnych bcp_bind wywołania zostały wprowadzone, a następnie wywołać bcp_sendrow wysłać wiersz danych z zmiennych swojego programu do SQL Server.

Za każdym razem, gdy chcesz SQL Server Aby przekazać wiersze już otrzymanych, wywołać bcp_batch. Na przykład wywołanie bcp_batch tylko jeden raz dla każdego 1000 wiersze wstawione lub innych interwałem.

W przypadku nie ma więcej wierszy do wstawienia wywołania bcp_done. Zaniechanie tej czynności powoduje błąd.

Ustawienia parametrów formantu, z bcp_control, nie mają wpływu na bcp_bind wiersza przesunięcia.

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

Dla nowych typów dużą wartość taką jak varchar(max), varbinary(max), lub nvarchar(max), można użyć SQLCHARACTER,SQLVARCHAR,SQLVARBINARY,SQLBINARY, aSQLNCHAR jako typ wskaźników w eDataType parametr.

Jeśli cbTerm to nie jest 0, wszystkie wartości (1, 2, 4 lub 8) jest prawidłowy (prefikscbIndicator). W takim przypadku SQL Server Macierzysta klient będzie wyszukiwać terminator, należy obliczyć długość danych w odniesieniu do terminator (i) i ustawić cbData Aby mniejszą wartość i i wartość prefiksu.

Jeśli cbTerm jest równa 0 i cbIndicator (prefiks) 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, który jest używany do efektywnego wysyłania pocztą fragmentów danych na serwerze.Format danych to specjalny prefiks jest następujący:

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

  • SPECIAL_PREFIX jest 0xFFFFFFFFFFFFFFFE

  • DATA_CHUNK jest prefiks 4 bajtów zawierającą długość segment, a po nim rzeczywiste dane, których długość jest określona w prefiksie 4 bajtów.

  • ZERO_CHUNK jest wartość 4 bajtów zawiera same zera (00000000) wskazujący koniec danych.

  • Inne długość prawidłową 8 bajtów jest traktowana jako długość regularnych danych.

Wywołanie bcp_columns Podczas korzystania z bcp_bind zakończy się błędem.

Pomoc techniczna dla rozszerzonego Data i funkcje czas bcp_bind

Aby uzyskać informacje na temat typów, używany z eDataType Parametr typu Data/Godzina, zobacz Zbiorcza Kopiuj zmiany dla daty rozszerzony / czas typy (OLE DB i ODBC).

Aby uzyskać więcej informacji zobaczData / czas ulepszenia (ODBC).

Example

#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);

See Also

Reference