bcp_bind
Bir program değişkenin veri bağlayan bir tablo sütun toplu kopyalamalama için SQL Server.
Sözdizimi
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ı olur.pData
Veri işaretçisi kopyalanır.If eDataType is SQLTEXT, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR or SQLIMAGE, pData can be NULL.BOŞ bir pData uzun veri değerleri gönderileceği gösterir SQL Server parçalar kullanarak 0700607006Bcp_moretext kullanılan.Kullanıcı yalnızca gereken küme pData kullanıcı ilişkili alan karşılık gelen sütun Aksi bir blob sütun ise null bcp_bind başarısız olur.Göstergeler veriler varsa, verileri doğrudan önce bellekte görünürler.The pData parameter points to the indicator variable in this case, and the width of the indicator, the cbIndicator parameter, is used by bulk copy to address user data correctly.
cbIndicator
Uzunluğu, bayt cinsinden sütun veri uzunluğunu veya null göstergesi olur.Geçerli göstergesi uzunluğu (gösterge kullanırken) 0, 1, 2, 4 veya 8 değerlerdir.Herhangi bir veri önce doğrudan bellek göstergeler görüntülenir.Örneğin, aşağıdaki yapı türü tanımı tamsayı değerleri içine eklemek için kullanılabilecek bir SQL Server toplu kopyalama kullanarak tablo:typedef struct tagBCPBOUNDINT { int iIndicator; int Value; } BCPBOUNDINT;
Örnek durumda pData parametresi küme olabilir adresine bildirilen bir örnek BCPBOUNDINT adresini yapısının iIndicator yapısı üye.The cbIndicator parameter would be set to the size of an integer (sizeof(int)), and the cbData parameter would again be set to the size of an integer (sizeof(int)).Boş değer içeren sunucu için bir satır değeri bağımlı sütun için değeri, örneğin toplu kopyalama iIndicator üyesi olması gereken küme sql_null_data için.
cbData
Herhangi bir uzunluk veya null göstergesi veya Sonlandırıcı uzunluğunu dahil değil program değişken veri baytı sayısıdır.Ayar cbData sql_null_data için sunucuya kopyalanan tüm satırların sütun null değeri içeren belirtir.
Ayar cbData sql_varlen_data için sistem bir dize Sonlandırıcı kullanır veya kopyalanan veri uzunluğunu belirlemek için başka bir yöntem, gösterir.
Tamsayılar gibi sabit uzunluklu veri türleri için veri türü sisteme veri uzunluğunu gösterir.Bu nedenle, sabit uzunluklu veri türleri için cbData güvenle sql_varlen_data veya verilerin uzunluğu olabilir.
İç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 is SQL_VARLEN_DATA, the system uses either a length/null indicator (if present) or a terminator sequence to determine the length of the data.Her iki değer varsa, kopyalanan veri en az tutarı sonuçlar bir sistem kullanır.If cbData is SQL_VARLEN_DATA, the data type of the column is a SQL Server character or binary type, and neither a length indicator nor a terminator sequence is specified, the system returns an error message.
If cbData is 0 or a positive value, the system uses cbData as the data length.Ancak, eğer, pozitif bir ek olarak cbData , uzunluk göstergesi veya Sonlandırıcı sırası verilir, kopyalanan veri en az tutarı sonuçlar yöntem kullanarak sistem veri uzunluğunu belirler.
The cbData parameter value represents the count of bytes of data.Karakter verileri geniş Unicode karakter ve ardından bir pozitif tarafından temsil edilen, cbData parametre değeri her karakterin bayt cinsinden boyutu ile çarpılır karakter sayısını temsil eder.
pTerm
Bir bayt deseni varsa bu program değişken sonunu işaretleyen işaretçidir.Örneğin, ANSI ve mbcs c dizeler genellikle 1 baytlık Sonlandırıcı (\0) vardır.Değişken için hiçbir Sonlandırıcı ise, küme pTerm null.
Boş bir dize kullanabilirsiniz ("") c null Sonlandırıcı program değişken Sonlandırıcı belirlenecek.Çünkü null sonlandırılmış null dize (sonlandırıcı bayt kendisi), tek bir bayt oluşturan küme cbTerm 1.Örneğin belirtmek için dize , szName olup biten 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 bir form 15 karakter arasında kopyalanması gösterebilir szName ikinci sütununa bağlı değişken tablo:
bcp_bind(hdbc, szName, 0, 15, NULL, 0, SQLCHARACTER, 2)
Toplu kopyalama API gerektiği gibi Unicode mbcs karakter dönüşümü gerçekleştirir.Emin olun her iki Sonlandırıcı bayt dize ve bayt uzunluğu dize doğru biçimde ayarlanır.Örneğin belirtmek için dizede szName bir Unicode olarak geniş karakter dizesi, Unicode null Sonlandırıcı değerine göre sona erdi:
bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, L"", sizeof(WCHAR), SQLNCHAR, 2)
Varsa bağlı SQL Server sütun geniş karakter, dönüştürme üzerinde gerçekleştirilen bcp_sendrow.If the SQL Server column is an MBCS character type, wide character to multibyte character conversion is performed as the data is sent to SQL Server.
cbTerm
Program değişken için içinde Sonlandırıcı bugünkü varsa bayt sayısıdır.Değişken için hiçbir Sonlandırıcı ise, küme cbTerm 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 parametre 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, odbc iki baytlık bir tamsayı belirtebilirsiniz kullanarak sql_c_short, yazın SQL Server-belirli bir tür SQLINT2.
SQL Server 2005desteği sqlxml ve sqludt veri türü belirteçleri eDataType paramenter.
idxServerCol
Sütunu sıralı konumunu veritabanına olan tablo için veriler kopyalanır.İlk sütun tablo içinde sütun 1 ' dir.Position'ın bir sütun tarafından bildirilen SQLColumns.
Döndürür
BAŞARILI veya başarısız.
Açıklamalar
Use bcp_bind bir program değişken veri kopyalamak hızlı ve etkili bir şekilde bir tablo , SQL Server.
Call bcp_init önce çağrılması bu veya herhangi diğer toplu kopyalama işlev.Arayan bcp_init ayarlar SQL Server hedef tablo için toplu kopyalama.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 hale bcp_bind call her sütun için SQL Server Tablo halinde, istediğiniz kopya.Sonra gerekli bcp_bind çağrıları yapıldı ve sonra call bcp_sendrow program değişkenleriniz gelen bir veri satırı göndermek için SQL Server.Yeniden birleştirme bir sütun desteklenmiyor.
İstediğiniz zaman SQL Server zaten alınan satır yürütme çağrısı bcp_batch.Örneğin, arama bcp_batch eklenen her 1000 satırlar için veya başka bir aralıkta bir kez.
Daha fazla satır eklenecek, çağrı bcp_done.Bunun yapılmaması sonuçlar hata.
İle belirtilen parametre ayarlarını kontrol bcp_control, etkisi olan bcp_bind satır aktarımları.
If pData for a column is set to NULL because its value will be supplied by calls to 0700607006Bcp_moretext kullanılan, any subsequent columns with eDataType set to SQLTEXT, SQLNTEXT, SQLXML, SQLUDT, SQLCHARACTER, SQLVARCHAR, SQLVARBINARY, SQLBINARY, SQLNCHAR, or SQLIMAGE must also be bound with pData set to NULL, and their values must also be supplied by calls to bcp_moretext.
Yeni büyük bir değer türleri için gibi varchar(max), varbinary(max), veya nvarchar(max), sqlcharacter, sqlvarchar, SQLVARBINARY, SQLBINARY ve sqlnchar türü göstergeleri olarak kullanabileceğiniz eDataType parametresi.
If cbTerm is not 0, any value (1, 2, 4, or 8) is valid for the prefix (cbIndicator).Bu durumda, SQL Server Native Client aramak için Sonlandırıcı, sonlandırıcı ile veri uzunluğunu hesaplamak (i), ve küme cbData değerine küçük ediyorum ve değerinin öneki.
If cbTerm is 0 and cbIndicator (the prefix) is not 0, cbIndicator must be 8.8 Bayt önek, şu değerleri alabilir:
0xFFFFFFFFFFFFFFFF alan için null değeri anlamına gelir
0xFFFFFFFFFFFFFFFE verimli bir şekilde veri parçalar halinde sunucusuna göndermek için kullanılan özel bir önek değer olarak kabul edilir.Bu özel bir önek ile veri biçimi şöyledir:
<SPECIAL_PREFIX> <0 or more DATA CHUNKS> <ZERO_CHUNK> where:
SPECIAL_PREFIX 0xFFFFFFFFFFFFFFFE olduğu
data_chunk ardından 4 bayt önek uzunluğunu belirtilen gerçek verileri öbek uzunluğunu içeren bir 4 bayt önektir.
zero_chunk verisinin sonunu gösteren tümüyle sıfırlardan (00000000) içeren bir 4 bayt değeridir.
Herhangi bir geçerli 8 bayt uzunlukta bir düzenli veri uzunluğu kabul edilir.
Arayan bcp_columns kullanırken bcp_bind sonuçlar hata.
bcp_bind Gelişmiş tarih ve saat özellikleri için destek
İle kullanılan türleri hakkında bilgi için eDataType parametresi, tarih/saat türleri için bkz: Gelişmiş tarih/saat türleri (ole db ve odbc) için toplu Kopyala değişiklikleri.
Daha fazla bilgi için bkz: Tarih/saat (odbc) geliştirmeleri.
Örnek
#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);