bcp_bind
Veri tablosu sütun toplu kopyalama için bir program değişkeninden bağlar SQL Server.
RETCODE bcp_bind (
HDBC hdbc,
LPCBYTE pData,
INT cbIndicator,
DBINT cbData,
LPCBYTE pTerm,
INT cbTerm,
INT eDataType,
INT idxServerCol);
Bağımsız değişkenler
hdbc
Toplu kopyalama etkin ODBC bağlantı tanıtıcısı mı.pData
Veri işaretçisi, kopyalamıştır.If eDataType SQLTEXT, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR veya SQLIMAGE, olabilirpData NULL olabilir.null BİR pData Uzun veri değerleri gönderilir, için gösterir.SQL Server içinde kullanarak parçalar bcp_moretext.Kullanıcı yalnızca gereken küme pData için kullanıcıya karşılık gelen sütun alanını bağlı null bir BLOB sütundur başka bcp_bind başarısız olur.Göstergeler verilerde varsa, önce verileri doğrudan bellekte görünürler.The pData parameter points to the indicator variable in this durum, and the width of the indicator, the cbIndicator parameter, is used by toplu kopyalama to address user data correctly.
cbIndicator
Bayt olarak uzunluğu veya null bir göstergenin sütun's veri uzunluğudur.Geçerli bir gösterge uzunluğu (yok bir gösterge kullanırken), 0, 1, 2, 4 veya 8 değerlerdir.Önce tüm verileri doğrudan bellek göstergesi görüntülenir.Örneğin, aşağıdaki yapısı tür tanımı tamsayı değerler içine eklemek için kullanılabileceği bir SQL Server toplu kopyalama kullanarak tablo:typedef struct tagBCPBOUNDINT { int iIndicator; int Value; } BCPBOUNDINT;
Örnek durumda, pData parametre yapısının BCPBOUNDINT adresini bildirilen örneğinin adresi için kümeiIndicator yapısı üyesi.The cbIndicator parameter would be küme to the size of an integer (sizeof(int)), and the cbData parameter would again be küme to the size of an integer (sizeof(int)).Copy, örneğin değerini ilişkili sütun için null değer içeren bir sunucu için bir satır toplu olarak iIndicator üye SQL_NULL_DATA için ayarlanmalıdır.
cbData
Program değişken olmayan herhangi bir gösterge, uzunluk veya null ya da Sonlandırıcı uzunluğu gibi veri baytı sayısıdır.Ayar cbData SQL_NULL_DATA için sunucuya kopyalanan tüm satırların bir sütun NULL değeri içermesini belirtir.
Ayar cbData SQL_VARLEN_DATA için sistem bir dize Sonlandırıcı kullanır veya verilerin uzunluğunu belirlemek için diğer bir yöntem, kopyalanan gösterir.
Tamsayılar gibi sabit uzunluklu veri türü için veri türü, sistemde veri uzunluğunu gösterir.Bu nedenle, sabit uzunluklu veri türü için cbData SQL_VARLEN_DATA veya verilerin uzunluğu güvenli olabilir.
Için SQL Server karakter ve ikili veri türleri cbData SQL_VARLEN_DATA, SQL_NULL_DATA, pozitif bir değer veya 0 olabilir.If cbData SQL_VARLEN_DATA, sistem bir uzunluk/null göstergesi (varsa) veya bir sonlandırıcı sırası veri uzunluğunu belirlemek için kullanır.Sağlanan her ikisi de, sistem bir kullanır, sonuçlar kopyalanan veri en az bir tutar.If cbData SQL_VARLEN_DATA ise, sütunun veri türü olan bir SQL Server Belirtilen karakter veya ikili türü ve uzunluğu bir gösterge kendisi bir sonlandırıcı sırası, sistem bir hata iletisi döndürür.
If cbData 0 ise veya pozitif bir değer, sistem kullanırcbData olarak veri uzunluğu.Ancak, if (pozitif yanında cbData değer uzunluğu göstergesi veya Sonlandırıcı sırası sağlanan, kopyalanan veri en az tutarı neden olan yöntem kullanarak, sistem veri uzunluğunu belirler.
The cbData parameter value represents the count of bytes of data.Karakter verilerinin Unicode geniş karakterleri ve pozitif gösterilir cbData parametre değeri, her karakterin bayt cinsinden boyutu çarpımı karakter sayısını gösterir.
pTerm
Bir bayt deseni, işaretçi, varsa, bu program değişken sonunu işaretleyen belirtilir.Örneğin, ANSI ve MBCS C dizeleri, genellikle bir 1 bayt Sonlandırıcı (\0) sahiptir.Değişken için yok bir sonlandırıcı ise, küme pTerm için NULL.
Boş bir dize kullanabilirsiniz ("") program değişkenli Sonlandırıcı C olan null Sonlandırıcı atamak.nulllukla sonlandırılmış null dize (Sonlandırıcı bayt kendisi), tek bir bayt oluşturan çünkü küme cbTerm to 1.Örneğin belirtmek için dize szName boşlukla sonlandırılmış ve Sonlandırıcı uzunluğunu belirtmek için kullanılmalıdır:
bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, "", 1, SQLCHARACTER, 2)
Bu örnek nonterminated biçimi 15 karakter kopyalama kaynağı olduğunu gösterebilir szName değişken ikinci sütun ilişkili tablo:
bcp_bind(hdbc, szName, 0, 15, NULL, 0, SQLCHARACTER, 2)
Toplu kopyalama API MBCS için Unicode karakter dönüşümü gerekli olarak gerçekleştirir.Sonlandırıcı bayt dizesi hem de bayt dize uzunluğunu olduğundan emin olun küme doğru.Örneğin belirtmek için dize szName değeri Unicode null Sonlandırıcı tarafından sonlandırılmış bir Unicode karakteri dizesi ise:
bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, L"", sizeof(WCHAR), SQLNCHAR, 2)
Bağlı SQL Server geniş karakter sütun ise, dönüştürme, üzerinde gerçekleştirilir bcp_sendrow. If the SQL Server sütun is an MBCS character type, geniş karakter to multibyte character conversion is performed as the data is sent to SQL Server.
cbTerm
Program değişkeni için Sonlandırıcı mevcut varsa bayt sayısıdır.Değişken için yok bir sonlandırıcı ise, küme cbTerm to 0.eDataType
Program değişken C veri türüdür.Program değişken veri veritabanı sütun türüne dönüştürülür.Bu parametreyi 0 ise, dönüştürme gerçekleştirilir.The eDataType parameter is enumerated by the SQL Server data type tokens in sqlncli.h, not the ODBC C data type enumerators.Örneğin, iki baytlık tamsayı, ODBC belirtebilirsiniz, SQL_C_SHORT yazın kullanarak SQL Server-Belirli bir tür SQLINT2.
SQL Server 2005 SQLXML ve SQLUDT veri türü belirteçleri için desteği eDataType paramenter.
idxServerCol
sütun sıralı konumu veritabanındaki tablo için hangi verileri kopyalanır.Ilk sütunda bir tablo sütun 1'dir.Sıralama konumu bir sütun tarafından bildirilen SQLColumns.
Verir
BAŞARıLı veya BAŞARıSıZ.
Remarks
Kullanımı bcp_bind , tabloya, bir program değişkeninden verileri kopyalamak hızlı ve verimli bir şekildeSQL Server.
Arama bcp_init Bu veya diğer bir toplu işlev çağırmadan önce. Arama bcp_init sets the SQL Server toplu kopyalama için hedef tablo. 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.
Ayrı bir olun bcp_bind her bir sütunda aramaSQL Server kopyalamak istediğiniz tablo. Sonra gerekli bcp_bind çağrı yapıldı ve arayın.bcp_sendrow için bir veri satırı program değişkenleriniz göndermek içinSQL Server.
Istediğiniz zaman SQL Server önceden alınan satırları'nı tamamlamak için , arama bcp_batch. Örneğin, bcp_batch kez eklenen 1000 her satır için veya diğer bir aralığı.
Daha fazla satır eklenecek olduğunda, arama bcp_done. Bunu yapmak için başarısızlık, hatayla sonuçlanır.
Denetim, ile belirtilen parametre ayarları bcp_control, bir etkisi yoktur bcp_bind satır aktarır.
If pData değeri yapılan çağrılar tarafından sağlanan çünkü bir sütun NULL olarak ayarlamak için bcp_moretext, izleyen tüm sütunlarla eDataType SQLTEXT SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR için ayarlamak veya SQLIMAGE de ile bağlanmalıdır pData NULL olarak ayarlayın ve değerleri de yapılan çağrılar tarafından sağlanmalıdır bcp_moretext.
Yeni bir büyük değere türleri gibi varchar(max), varbinary(max), veya nvarchar(max), SQLCHARACTER, kullanabilirsiniz.sqlvarchar,sqlvarbinary,SQLBINARY, veIçinde türü göstergeleri olarak SQLNCHAR eDataType Parametre.
If cbTerm ise 0 değil, herhangi bir değer (1, 2, 4 veya 8) önekini (için geçerlidircbIndicator). Bu durumda, SQL Server Yerel bir istemci için Sonlandırıcı arama, veri uzunluğu Sonlandırıcı (göre hesaplar.i) ve cbData daha küçük değerine i) ve önek değeri.
If cbTerm 0 ve cbIndicator (önek) değilse, 0 cbIndicator 8 olması gerekir. 8 Bayt) önekini aşağıdaki değerleri alabilir:
0xFFFFFFFFFFFFFFFF boş (null) değer için alan anlamına gelir.
0xFFFFFFFFFFFFFFFE verimli bir şekilde veri yığınları, sunucuya göndermek için kullanılan özel bir önek değeri olarak kabul edilir.Bu özel önekle veri biçimi şöyledir:
<SPECIAL_PREFIX> <0 or more DATA CHUNKS> <ZERO_CHUNK> where:
SPECIAL_PREFIX 0xFFFFFFFFFFFFFFFE olur.
DATA_CHUNK ardından 4 baytlık önek uzunluğunu belirtilen gerçek verileri öbek, uzunluğunu içeren 4 baytlık bir önektir.
ZERO_CHUNK verisinin sonunu belirten tümüyle sıfırlardan (00000000) içeren bir 4 bayt değeridir.
Diğer herhangi bir geçerli bir 8 bayt uzunlukta bir normal veri uzunluğu nitelenir.
Arama bcp_columns kullanırken bcp_bind hatayla sonuçlanır.
Gelişmiş tarih ve saat özellikleri için destek bcp_bind
Kullanılan türleri hakkında bilgi için eDataType parametre, tarih/saat türleri Bkz: Gelişmiş tarih veya saat türleri (OLE DB ve ODBC) için toplu kopyalama değişiklikleri.
Daha fazla bilgi için bkz:Geliştirmeler'nı (ODBC) tarih/saat.
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);