Udostępnij za pośrednictwem


bcp_moretext

Wysyła część wartości typu długie o zmiennej długości danych do SQL Server.

Składnia

RETCODE bcp_moretext (
        HDBC hdbc,
        DBINT cbData,
        LPCBYTE pData);

Argumenty

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

  • cbData
    Jest to liczba bajtów danych kopiowanych danych odwołuje się do programu SQL Server pData.Wartość SQL_NULL_DATA wskazuje wartość NULL.

  • pData
    Jest wskaźnik do fragment danych obsługiwane, długie o zmiennej długości, wysłane do SQL Server.

Zwraca

POMYŚLNIE lub nie powiedzie się.

Uwagi

This function can be used in conjunction with bcp_bind and bcp_sendrow to copy long, variable-length data values to SQL Server in a number of smaller chunks.bcp_moretext can be used with columns that have the following SQL Server data types: text, ntext, image, varchar(max), nvarchar(max), varbinary(max), user-defined type (UDT), and XML.bcp_moretext does not support data conversions, the data supplied must match the data type of the target column.

Jeśli bcp_bind wywołana z nonNULL pData parametr dla typów danych, które są obsługiwane przez bcp_moretext, bcp_sendrow wysyła wartości danych, niezależnie od długości.Jeśli jednak bcp_bind ma wartość NULL pData parametr obsługiwane typy danych, bcp_moretext służy do kopiowania danych natychmiast po pomyślnym powrotu z bcp_sendrow wskazujące, że żadnych kolumn związanego z dane zostały przetworzone.

Jeśli używasz bcp_moretext wysłać jedną kolumna typu danych obsługiwanych w wierszu, należy również służy do wysyłania wszystkich innych kolumn typu danych obsługiwanych w wierszu.Kolumny nie mogą być pominięte.Obsługiwane typy danych są TEKST_SQL, SQLNTEXT, SQLIMAGE, SQLUDT i SQLXML.SQLCHARACTER, SQLVARCHAR, SQNCHAR, SQLBINARY i SQLVARBINARY również należą do tej kategorii Jeśli kolumna jest varchar(max), nvarchar(max) lub varbinary(max), odpowiednio.

Wywołanie każdej bcp_bind lub bcp_collen ustawia łączna długość wszystkich części danych mają być kopiowane do SQL Server kolumna.Próba wysłania większej liczby bajtów niż określony w wywołaniu programu SQL Server bcp_bind lub bcp_collen generuje błąd.Ten błąd wzrastający, na przykład w aplikacji używane w bcp_collen do zestaw długość dostępnych danych serwera SQL Server tekst kolumna do 4500, następnie wywoływana bcp_moretext pięć razy podczas wskazujące na każde wywołanie, że dane buforu długości 1000 bajtów.

Jeśli skopiowany wiersz zawiera więcej niż jedną kolumna długie o zmiennej długości, bcp_moretext najpierw wysyła dane do najniższego numerowane ordinally kolumna, po następnym najniższej kolumna numerowane ordinally i tak dalej.Ważne jest poprawne ustawienie całkowita długość danych oczekiwanych.Nie ma możliwości na sygnał, poza ustawienie długości otrzymania przez kopiowanie masowe wszystkie dane dla kolumna.

Gdy var(max) wartości są wysyłane do serwera za pomocą bcp_sendrow i bcp_moretext, nie jest konieczne do wywołania bcp_collen do zestaw długość kolumna.Natomiast dla tych typów tylko wartość jest zakończony przez wywołanie bcp_sendrow o długości zero.

Aplikacja normalnie wywołuje bcp_sendrow i bcp_moretext w pętli do wysyłania liczbę wierszy danych.Oto konspekt jak to zrobić dla tabela zawierającej dwa tekstu kolumny:

while (there are still rows to send)
{
bcp_sendrow(...);

for (all the data in the first varbinary(max) column)
bcp_moretext(...);
bcp_moretext(hdbc, 0, NULL);

for (all the data in the second varbinary(max) column)
bcp_moretext(...);
bcp_moretext(hdbc, 0, NULL);

}

Przykład

W tym przykładzie przedstawiono sposób użycia bcp_moretext z bcp_bind i bcp_sendrow:

// Variables like henv not specified.
HDBC      hdbc;
DBINT      idRow = 5;
char*      pPart1 = "This text value isn't very long,";
char*      pPart2 = " but it's broken into three parts";
char*      pPart3 = " anyhow.";
DBINT      cbAllParts;
DBINT      nRowsProcessed;
 
// 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 bulk copy. 
if (bcp_init(hdbc, "comdb..articles", NULL, NULL, DB_IN) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Bind program variables to table columns. 
if (bcp_bind(hdbc, (LPCBYTE) &idRow, 0, SQL_VARLEN_DATA, NULL, 0,
   SQLINT4, 1)    == FAIL)
   {
   // Raise error and return.
   return;
   }

cbAllParts = (DBINT) (strnlen(pPart1, sizeof(pPart1) + 1) + strnlen(pPart2, sizeof(pPart2) + 1) + strnlen(pPart3, sizeof(pPart3) + 1));
if (bcp_bind(hdbc, NULL, 0, cbAllParts, NULL, 0, SQLTEXT, 2) == FAIL)
   {
   // Raise error and return.
   return;
   }

// Send this row, with the text value broken into three chunks. 
if (bcp_sendrow(hdbc) == FAIL)
   {
   // Raise error and return.
   return;
   }

if (bcp_moretext(hdbc, (DBINT) strnlen(pPart1, sizeof(pPart1) + 1), pPart1) == FAIL)
   {
   // Raise error and return.
   return;
   }
if (bcp_moretext(hdbc, (DBINT) strnlen(pPart2, sizeof(pPart2) + 1), pPart2) == FAIL)
   {
   // Raise error and return.
   return;
   }
if (bcp_moretext(hdbc, (DBINT) strnlen(pPart3, sizeof(pPart3) + 1), pPart3) == FAIL)
   {
   // Raise error and return.
   return;
   }

// All done. Get the number of rows processed (should be one).
nRowsProcessed = bcp_done(hdbc);

// Carry on.

Zobacz także

Odwołanie