bcp_bind
Veri bir tablo sütun için toplu kopya bir program değişken bağlar 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ı olduğunu.pData
Veri işaretçisi kopyalanır. Eğer eDataType sqltext, sqlntext, sqlxml, sqludt, sqlcharacter, sqlvarchar, SQLVARBINARY, SQLBINARY, sqlnchar veya SQLIMAGE, pData boş olabilir. BOŞ pData uzun veri değerleri gönderileceği gösterir SQL Serverkullanarak parçaları yapılan. Kullanıcı yalnızca ayarlamanız gerekir pData kullanıcı ilişkili alana karşılık gelen sütun bir blob sütun yoksa NULL bcp_bind başarısız olur.Göstergeler veriler varsa, verileri önce doğrudan bellek görünürler. PData parametresi işaret eder ve bu durum göstergesi, genişliği gösterge değişkeni için cbIndicator parametresi tarafından kullanılır toplu kopyalama adresi kullanıcı verileri için doğru.
cbIndicator
Uzunluğu, bayt cinsinden için sütun veri uzunluğu ya da boş bir göstergesi olduğunu. Geçerli göstergesi uzunluğu değerler (hiçbir gösterge kullanırken) 0, 1, 2, 4 veya 8. Doğrudan önce tüm verileri bellekte göstergeleri görüntülenir. Örneğin, aşağıdaki yapı türü tanımı tamsayı değerleri içine eklemek için kullanılabilir bir SQL Servertoplu kopya kullanarak tablo:typedef struct tagBCPBOUNDINT { int iIndicator; int Value; } BCPBOUNDINT; typedef struct tagBCPBOUNDINT { int iIndicator; int Value; } BCPBOUNDINT;
Örnek durumda pData parametresi yapısı, BCPBOUNDINT adresinin bildirilmiş bir örneğini adresine ayarlanmış olabilir iIndicator yapısı üye. CbIndicator parametre tamsayı boyutu için ayarlanmış olabilir (sizeof(int)) ve cbData parametresi tekrar ayarlanabilir boyutu için bir tamsayı (sizeof(int)). Toplu kopyalama satır boş içeren sunucu için değeri bağımlı sütun, örneğin değeri iIndicator üye sql_null_data için ayarlanmalıdır.
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çerdiğini belirtir.
Ayar cbData sql_varlen_data için sistem-ecek kullanma bir dize Sonlandırıcı veya kopyalanan veri uzunluğunu belirlemek için başka bir yöntem olduğunu gösterir.
Tamsayılar gibi sabit uzunluklu veri türleri için veri türü sistem veri uzunluğunu gösterir. Bu nedenle, sabit uzunluklu veri türleri için cbData güvenle sql_varlen_data ya da veri uzunluğu olabilir.
İçin SQL Serverkarakter ve ikili veri türleri cbData sql_varlen_data, sql_null_data, pozitif bir değer veya 0 olabilir. Eğer cbData sql_varlen_data, olan sistem veri uzunluğunu belirlemek için (varsa) bir uzunluk/null göstergesi veya Sonlandırıcı sırası kullanır. Hem sağlanır, kopyalanan veri en az tutarı sonuçları bir sistem kullanır. Eğer cbData sql_varlen_data, 's sütun veri türü olan bir SQL Serverkarakter veya ikili türü ve uzunluğu göstergesi kendisi bir Sonlandırıcı sırası belirtilir, sistem hata iletisi döndürür.
Eğer cbData pozitif bir değer, sistemin kullandığı veya 0 cbData olarak veri uzunluğu. Ancak, eğer, pozitif ek olarak cbData değer uzunluk göstergesi veya Sonlandırıcı sırası sağlanır, kopyalanan veri en az tutarı sonuçları yöntemini kullanarak sistem veri uzunluğu belirler.
CbData parametre değeri temsil eden veri bayt sayısı. Eğer karakter veri Unicode geniş karakterler, sonra da olumlu tarafından temsil edilen cbData parametre değeri gösteren karakter her karakter bayt boyutu ile çarpılır.
pTerm
Bir bayt deseni, eğer bu program değişken sonunu işaretçidir. Örneğin, ANSI ve mbcs c dizeler genellikle bir 1 bayt Sonlandırıcı (\0) var.Değişken için hiçbir Sonlandırıcı ise, set pTerm NULL.
Sen-ebilmek kullanma boş bir dize ("") program değişken Sonlandırıcı c null Sonlandırıcı atamak. Biten boş dize (Sonlandırıcı bayt kendisi) tek bir bayt oluşturmaktadır çünkü cbTerm 1. Örneğin belirtmek için dizeyi szName biten olduğunu ve Sonlandırıcı uzunluğunu belirtmek için kullanılmalıdır:
bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, "", 1, SQLCHARACTER, 2) bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, "", 1, SQLCHARACTER, 2)
Bu örnek nonterminated sekli 15 karakter dan kopyalanması gösterebilir szName değişken ilişkili tabloda ikinci sütun için:
bcp_bind(hdbc, szName, 0, 15, NULL, 0, SQLCHARACTER, 2) 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. Sonlandırıcı bayt dizesi ve bayt dize uzunluğunu doğru olarak ayarlandığından emin olun. Örneğin belirtmek için dizeyi szName Unicode null Sonlandırıcı değeri tarafından sonlandırılmış bir Unicode geniş karakter dizesi:
bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, L"", sizeof(WCHAR), SQLNCHAR, 2) bcp_bind(hdbc, szName, 0, SQL_VARLEN_DATA, L"", sizeof(WCHAR), SQLNCHAR, 2)
Eğer bağlı SQL Serversütun genişliğinde karakter, dönüştürme gerçekleştirilir Bcp_sendrow. Eğer SQL Serversütun mbcs karakter türü, veri gönderilir gibi geniş karakter çok baytlı karakter dönüştürme gerçekleştirilir SQL Server.
cbTerm
Bayt için program değişken, Terminatör mevcut varsa sayısıdır. Değişken için hiçbir Sonlandırıcı ise, set 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.EDataType parametresi tarafından numaralandırılan SQL Serververi türü belirteçleri sqlncli.h, değil odbc c veri türü numaralandırıcıları. Örneğin, odbc iki baytlık bir tamsayı belirtebilirsiniz kullanarak sql_c_short, yazın SQL Server-belirli türdeki SQLINT2.
SQL Server 2005desteği sqlxml ve sqludt veri türü belirteçleri eDataType paramenter.
idxServerCol
Hangi veriler kopyalanır veritabanı tablosunda sütun sıralı konumunu olduğunu. Tablonun ilk sütunundaki sütun 1 ' dir. Sütunu sıralı konumunu tarafından bildirilen SQLColumns.
Döner
BAŞARILI veya başarısız.
Açıklamalar
Kullanım bcp_bind için bir program değişken bir tabloya veri kopyalamak hızlı ve etkili bir yol SQL Server.
Arama bcp_initBu ya da başka bir toplu kopyalama işlevi çağırmadan önce. Arama bcp_init ayarlar SQL Servertoplu kopyalama için hedef tablo. Ararken bcp_init kullanım için bcp_bind ve Bcp_sendrow, bcp_initszDataFile veri dosyasını gösteren parametre, is set null; bcp_initeDirection parametresi yönü için ayarlanır.
Ayrı bir hale bcp_bind çağrı her sütun için SQL Serveriçine kopyalamak istediğiniz tablo. Sonra gerekli bcp_bind çağrılar yapılmış, sonra arama bcp_sendrow senin program değişkenleri veri satırı göndermek için SQL Server. Bir sütunu yeniden bağlama desteklenmez.
İstediğiniz zaman SQL Serverzaten alınan satırları işlemek için çağrı bcp_batch. Örneğin, arama bcp_batch eklenen her 1000 satır veya diğer bir aralıkta bir kez.
Eklenecek başka hiçbir satır olduğunda, arama bcp_done. Aksi takdirde, hatayla sonuçlanır.
İle belirtilen parametre ayarlarını kontrol bcp_controletkisi var bcp_bind satır aktarımları.
Eğer pDataiçin çünkü değeri yapılan çağrılar tarafından sağlanan bir sütun null olarak ayarlanır 0700607006Bcp_moretext, herhangi bir sonraki sütunlar ile eDataTypesqltext, sqlntext, sqlxml, sqludt, sqlcharacter, sqlvarchar, SQLVARBINARY, SQLBINARY, sqlnchar, için ayarlamak veya SQLIMAGE da ile ilişkili olmalıdır pDatanull olarak ayarlayın ve değerlerine de yapılan çağrılar tarafından sağlanmalıdır bcp_moretext.
Yeni büyük bir değer türleri gibi varchar(max), varbinary(max), veya nvarchar(max), sqlcharacter, sqlvarchar, SQLVARBINARY, SQLBINARY ve sqlnchar türü göstergeleri olarak kullanabileceğiniz eDataTypeparametresi.
Eğer cbTermolduğunu değil 0, herhangi bir değer (1, 2, 4 veya 8) öneki için geçerlidir (cbIndicator). Bu durumda, SQL Serveryerel istemci arama bitirmek için veri Sonlandırıcı uzunluğunu hesaplamak (i) ve cbDataküçük değere önek değerini ve i.
Eğer cbTerm0'dır ve cbIndicator(önek) değil 0, cbIndicator8 olmalı. 8 Bayt önek şu değerleri alabilir:
0xffffffffffffffff, alan için null değeri demektir.
0xFFFFFFFFFFFFFFFE verimli veri topakları sunucusuna göndermek için kullanılan özel önek değer olarak kabul edilir. Bu özel öneki ile veri biçimi şöyledir:
<SPECIAL_PREFIX><0 ya da daha fazla veri TOPAKLARI><zero_chunk> burada:
SPECIAL_PREFIX 0xFFFFFFFFFFFFFFFE olduğunu
data_chunk, ardından 4 bayt önek uzunluğunu belirtilen gerçek verileri öbek uzunluğunu içeren bir 4 bayt önektir.
zero_chunk, tümüyle sıfırlardan (00000000) verisinin sonunu belirten içeren bir 4 bayt değeridir.
Herhangi bir geçerli 8 bayt uzunlukta bir düzenli veri uzunluğu değerlendirilir.
Arama Bcp_columnskullanırken bcp_bind bir hata oluşur.
bcp_bind Gelişmiş tarih ve saat özellikleri için destek
Kullanılan türleri hakkında bilgi için eDataTypeparametresini, Tarih ve saat türleri görmek 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);
#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);