bcp_moretext
Bir uzun, değişken uzunluklu veri türü değerine parçası gönderirSQL Server.
RETCODE bcp_moretext (
HDBC hdbc,
DBINT cbData,
LPCBYTE pData);
Bağımsız değişkenler
hdbc
Is toplu kopyalama - etkin ODBC bağlantı tanıtıcısı.cbData
SQL Server tarafından başvurulan verilerden kopyalanmış veri baytları sayısıpData.SQL_NULL_DATA değeri NULL gösterir.pData
İş için gönderilmesine desteklenen, uzun, değişken uzunlukta veri yığın işaretçisiSQL Server.
Verir
BAŞARISINA ya da başarısız olur.
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.
Ifbcp_bind desteklediği tarafından bcp_moretext veri türleri ile pDatanonNULL parametre olarak adlandırılır, tüm veri değeri, bağımsız olarak uzunluğu. bcp_sendrow gönderir İse, ancakbcp_bind NULL pData parametre desteklenen veri türleri varsa, bcp_moretextbcp_sendrow mevcut verilerle ilişkili sütun işlenen gösteren arasında hemen bir başarılı dönüşten sonra verileri kopyalamak için kullanılabilir.
Kullanmanızıbcp_moretext desteklenen veri türü göndermek için sütun bir satırda, desteklenen tüm diğer veri türü sütun s satır. göndermek için de gerekir Hiçbir sütun atlanabilir.Desteklenen veri türleridir SQLTEXT, SQLNTEXT, SQLIMAGE, SQLUDT ve SQLXML.Sırasıyla varchar(max), nvarchar(max) veya varbinary(max), sütun, SQLCHARACTER, SQLVARCHAR, SQNCHAR, SQLBINARY ve SQLVARBINARY de bu kategoridedir.
Ya da aramabcp_bindbcp_collen kopyalanacak SQL Server sütun. için tüm veri bölümleri toplam uzunluğu ayarlar SQL Server çağrısında belirtilenden daha fazla bayt gönderme girişimibcp_bind bir hata. veya bcp_collen oluşturur Bu hata ortaya, örneğin, bir uygulamada, kullanılanbcp_collen 4500 için kullanılabilir verilerin bir SQL Server metin sütunun uzunluğunu ayarlamak için sonra adlı bcp_moretext beş kez veri uzunluğu arabellek her çağrıda gösteren ederken 1000 bayt uzun
Kopyalanan bir satıra birden fazla uzun, değişken uzunlukta sütun içerirbcp_moretext ilk gönderdiği verileri için düşük ordinally numaralı sütununda sonraki tarafından izlenen, en düşük ordinally numaralı sütun ve benzeri.Doğru ayarı beklenen veriler toplam uzunluğu önemlidir.Uzunluk ayarı dışında bir sütun için tüm veriler aldığını yığın kopyalama ile sinyal yolu yoktur.
Zamanvar(max)değerler için kullanarak sunucuya gönderilirbcp_sendrowve bcp_moretextArama gerekli değil.bcp_collenküme sütun uzunluğu.Bunun yerine, yalnızca bu türleri için değeri sona çağırarakbcp_sendrowbir uzunluğu sıfır.
Bir uygulamanın normal olarak çağırırbcp_sendrow ve bcp_moretext . satır bir dizi göndermek için döngü içinde İşte bunu içeren iki tablo nasıl anahatmetin sütunlar:
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);
}
Örnek
Bu örnek, nasıl kullanılacağını gösterirbcp_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.