Aracılığıyla paylaş


0700607006Bcp_moretext

Gönderen bir uzun, değişken uzunlukta veri türü değeri bir parçası SQL Server.

Sözdizimi

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

Bağımsız değişkenler

  • hdbc
    Toplu kopyalama etkin odbc bağlantı tanıtıcısı olduğunu.

  • cbData
    SQL Server tarafından başvurulan veri kopyalanan veri baytları sayısı pData. sql_null_data değeri null gösterir.

  • pData
    Gönderilmek üzere desteklenen, uzun, değişken uzunlukta veri Öbek işaretçisine olduğunu SQL Server.

Döner

BAŞARILI veya başarısız.

Açıklamalar

Bu işlev ile birlikte kullanılabilir bcp_bind ve bcp_sendrow uzun, değişken uzunlukta veri değerleri SQL Server'a bir dizi daha küçük parçalara kopyalamak için. yapılan aşağıdaki SQL Server veri türleri içeren sütunlar ile kullanılabilir: text, ntext, image, varchar(max), nvarchar(max), varbinary(max), kullanıcı tanımlı türü (udt) ve xml. yapılan does değil destek veri dönüşümleri, sağlanan veri hedef sütunun veri türüyle eşleşmesi gerekir.

Eğer bcp_bind ile bir nonNULL denir pData parametresi tarafından desteklenen veri türleri için yapılan, bcp_sendrow uzunluğu bakılmaksızın tüm veri değerini gönderir. Eğer, ancak bcp_bind boş olan pData parametresi için desteklenen veri türleri, yapılan hemen sonra başarılı bir getiri veri kopyalamak için kullanılan bcp_sendrow mevcut verilerle ilişkili sütunlar işlenen gösteren.

Eğer sen kullanma yapılan bir desteklenen veri türü sütun bir satır göndermek için de diğer tüm desteklenen veri türü sütun satır göndermek için kullanabilmeniz gerekir. Hiçbir sütun atlanabilir. Desteklenen veri türleri, sqltext, sqlntext, SQLIMAGE, sqludt ve sqlxml vardır. Sütun bir varchar(max), nvarchar(max) veya varbinary(max), sırasıyla ise sqlcharacter, sqlvarchar, sqnchar, SQLBINARY ve SQLVARBINARY da bu kategoriye girer.

Ya da arama bcp_bind veya bcp_collen SQL Server sütunu kopyalanacak tüm veri bölümleri toplam uzunluğunu ayarlar. SQL Server arama belirtilenden daha fazla bayt gönderme girişimi bcp_bind veya bcp_collen bir hata üretir. Bu hata, örneğin, kullanılan bir uygulama ortaya olacak bcp_collen bir SQL Server için kullanılabilir veri uzunluğunu ayarlamak için metin sonra 4500, sütun adı verilen yapılan beş kez konmadığı uzunluğu her çağrıda gösteren 1000 byte uzun süre.

Kopyalanan bir satırda birden çok uzun, değişken uzunlukta sütun varsa yapılan en düşük verileri, sütun, sonraki tarafından takip ordinally sayılı ilk gönderdiği en düşük ordinally numaralı sütun vb.. Doğru ayarı beklenen veriler toplam uzunluğu önemlidir. Orada hiçbir şekilde sinyal ayarı, tüm verileri sütun aldı ki toplu kopyalama tarafından uzunluğunun dışında.

Ne zaman var(max)değerleri kullanarak sunucuya gönderilir bcp_sendrowve bcp_moretext, onun'değil gerekli-e doğru aramak bcp_collensütun uzunluğunu ayarlamak için. Bunun yerine, yalnızca bu türleri için değeri çağırarak sona bcp_sendrowSıfır uzunluğundaki.

Uygulamanın normal olarak çağırır bcp_sendrow ve yapılan birkaç satır veri göndermek için döngü içinde. İşte bir özetini içeren iki tablo için bunu nasıl metin 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);

}

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österir yapılan ile bcp_bind ve 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.

// 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.

Ayrıca bkz.

Başvuru

Toplu kopyalama işlevleri