Udostępnij za pośrednictwem


bcp_moretext

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

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

Argumenty

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

  • cbData
    Jest to liczba bajtów danych kopiowane do programu SQL Server na podstawie danych, do którego odnosi się pData.Wartość SQL_NULL_DATA wskazuje wartość NULL.

  • pData
    Jest wskaźnikiem segment danych obsługiwane, długości, o zmiennej długości, które zostanie wysłane do SQL Server.

Zwraca wartość

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

Remarks

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 jest wywoływana z niepustych pData typy danych, które są obsługiwane przez parametrbcp_moretext, bcp_sendrow wysyła wartości danych, niezależnie od długości.Jeśli jednak bcp_bind ma NULL pData obsługiwane typy danych, parametrbcp_moretext można użyć do kopiowania danych bezpośrednio po pomyślnym zwrot z bcp_sendrow wskazujący, że dowolnej kolumny danych obecnych związane są przetwarzane.

Jeśli używasz bcp_moretext wysłać jedną kolumna o typie danych jest obsługiwane w wierszu, należy również użyć, aby wysłać wszystkie pozostałe kolumna Typ danych obsługiwanych w wierszu.Brak kolumn mogą zostać pominięte.Obsługiwane typy danych są SQLTEXT, SQLNTEXT, SQLIMAGE, SQLUDT i SQLXML.SQLCHARACTER, SQLVARCHAR, SQNCHAR, SQLBINARY i SQLVARBINARY także należą do tej kategorii Jeśli kolumna jest varchar(max), nvarchar(max) lub varbinary(max), odpowiednio.

Wywołanie albo bcp_bind or bcp_collen ustawia łączna długość wszystkich części danych mają być kopiowane do kolumna serwera SQL.Próba wysłania większej liczby bajtów niż określony w wywołaniu programu SQL Server bcp_bind or bcp_collen generuje błąd.Ten błąd może na przykład powstać w aplikacji, które używane bcp_collen , aby ustawić długość dostępnych danych o programu SQL Server tekst kolumna 4500, następnie wywoływana bcp_moretext pięciokrotnie podczas wskazujący na każdym połączeniu, że dane buforu długości była 1000 bajtów.

Jeśli skopiowane wiersz zawiera więcej niż jedną kolumna długich, o zmiennej długości bcp_moretext pierwszej wysyła dane do najniższej ordinally numerowane kolumna, po następnym najniższą ordinally numerowanych kolumna i tak dalej.Ważne jest poprawne ustawienia całkowitej długości oczekiwane dane.Nie można w sposób nie nastąpiło poza o ustawienia długości otrzymania wszystkie dane dla kolumna przez kopiowanie masowe.

Kiedy var(max) wartości są wysyłane do serwera przy użyciu bcp_sendrow i bcp_moretext, nie jest konieczne do wywołania bcp_collen Aby zestaw długości kolumna. Zamiast tego dla tych typów tylko, wartość zostanie zakończona, wywołując bcp_sendrow o długości zero.

Zazwyczaj wymaga aplikacji bcp_sendrow and bcp_moretext w pętli do wysyłania pewną liczbę wierszy danych.Poniżej przedstawiono zarys jak to zrobić w przypadku tabela zawierającej dwie tekst columns:

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 with bcp_bind and 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.

See Also

Reference