bcp_init
Toplu kopyalama işlemi başlatır.
RETCODE bcp_init (
HDBC hdbc,
LPCTSTR szTable,
LPCTSTR szDataFile,
LPCTSTR szErrorFile,
INT eDirection);
Bağımsız değişkenler
hdbc
Toplu kopyalama etkin ODBC bağlantı tanıtıcısı mı.szTable
Veritabanı tablosu, içine veya dışına kopyalanacak adıdır.Bu ad, veritabanı adı ya da sahip adı da içerebilir.Örneğin, Pubs.gracie.Titles, Pubsbaşlıkları, gracie.Titles, and başlıkları tüm geçerli tablo adları olur.If eDirection is DB_OUT, szTable , bir veritabanı görünümü adını da olabilir.
If eDirection is DB_OUT and a SELECT statement is specified using bcp_control before bcp_exec is called, bcp_initszTable must be set to NULL.
szDataFile
Kullanıcı dosyayı içine veya dışına kopyalanacak adıdır.Verileri doğrudan değişkenleri kullanarak kopyalanan bcp_sendrow, küme szDataFile için NULL.szErrorFile
Ilerleme durumu iletileri, hata iletileri ve herhangi bir nedenle bir tablo için bir kullanıcı dosya kopyalanamadı, tüm satırları kopyalarını doldurulması hata dosyasının adıdır.NULL olarak geçirilir szErrorFilehiçbir hata dosyası kullanılır.eDirection
Kopya DB_IN veya DB_OUT yönünü belirtilir.Program değişkenleri veya bir kullanıcı dosyaya bir kopyadan DB_IN gösteren bir tablo.Bir veritabanının bir kopyasını DB_OUT gösterir tablo bir kullanıcı dosyaya.Bir kullanıcı dosya adı ile DB_OUT belirtmeniz gerekir.
Verir
BAŞARıLı veya BAŞARıSıZ.
Remarks
Call bcp_init before calling any other bulk-copy function.bcp_init performs the necessary initializations for a bulk copy of data between the workstation and SQL Server.
The bcp_init işlev must be provided with an ODBC connection handle enabled for use with toplu kopyalama functions.Tanıtıcı olarak etkinleştirmek için kullanın. SQLkümeConnectAttr SQL_COPT_SS_BCP ile küme SQL_BCP_ON bir ayrılmış, ancak bağlı değil, bağlantı tutamacı için.Bağlı bir tutamacı özniteliği hatayla sonuçlanır atama deneniyor.
When a data file is specified, bcp_init examines the structure of the database source or target table, not the data file.bcp_init specifies data format values for the data file based on each column in the database table, view, or SELECT result set.This specification includes the data type of each column, the presence or absence of a length or null indicator and terminator byte strings in the data, and the width of fixed-length data types.bcp_init sets these values as follows:
Belirtilen veri türü, veritabanı tablosu, görünüm veya SELECT sonuç sütununun veri türü olan küme.Veri türü tarafından numaralandırılan SQL Server yerel veri türleri sqlncli.h belirtildi. Verinin kendisi, bilgisayar formunda gösterilir.Diğer bir deyişle, verileri bir sütun, tamsayı veri türü büyük dört bayt sırası tarafından temsil edilen- ya da küçük veri dosyasını oluşturan bilgisayara bağlı endian.
Uzunluğu sabit bir veritabanı veri türü, veri dosya veri uzunluğunun de düzeltilmiştir.(Örneğin, verileri işleyen bir toplu işlevleri bcp_exec) verileri satır, veritabanında tablo, görünüm veya SELECT sütun listesi ile belirtilen veri uzunluğu aynı olması için veri dosyasındaki verilerin uzunluğunu bekleniyor ayrıştırılamadı.Örneğin, veri olarak tanımlanan bir veritabanı sütun için CHAR(13) 13 karakter veri dosyasındaki her satır için temsil gerekir.Sabit uzunluklu veri ile null bir gösterge, öneki veritabanı sütun null değerlere izin verir.
Sonlandırıcı baytlık sıra tanımlandığında Sonlandırıcı baytlık sıra uzunluğu 0 olarak küme.
Kopyalama sırasında SQL Server, veri dosyasını her biri için veri olmalıdır sütun veritabanı tablosunda. Kopyalama sırasında SQL Server, tüm sütunlar veritabanında tablo, görünüm veya SELECT sonuç kümesi verileri, veri dosyasına kopyalanır.
Kopyalama sırasında SQL Server, sıralı konumunu bir sütun veri dosyasındaki sütunu sıralı konumunu veritabanındaki aynı olmalıdır. tablo. Kopyalama sırasında SQL Server, bcp_exec veritabanı tablosunda sütun sıralı konumunu temel veri yerleştirir.
Bir veritabanı veri türünü değişken uzunluğu (örneğin, ise varbinary(22)) veya, bir veritabanı sütununa null değeri içerebilir, veri dosyasındaki verilerin uzunluğu/null bir göstergesi öneki.Gösterge genişliğini, veri türü ve toplu kopyalama sürümüne göre değişir.
Bir veri dosyası için belirtilen veri biçimi değerleri değiştirmek için , arama bcp_columns and bcp_colfmt.
Toplu kopyalar SQL Server tabloları, dizinler, veritabanı kurtarma modeli SIMPLE ya da BULK_LOGGED ayarlayarak içermeyen optimize. Daha fazla bilgi için bkz: Toplu alma performansı en iyi duruma getirme ve alter VERİTABANI.
Herhangi bir veri dosyası kullanılırsa, çağırması gerekir bcp_bind veri fsor bellekte, her bir sütun ve kopya veri satırlarını biçimini ve konumu belirtmek içinSQL Server Bu alternatif bcp_sendrow.
Örnek
Bu örnek biçim dosyası ODBC bcp_init işlev nasıl kullanıldığını gösterir.
Derleme ve C++ kod çalıştırmak için önce aşağıdakileri yapmanız gerekir:
Bir ODBC veri oluşturma kaynak test denir.Bu veri kaynağını, herhangi bir veritabanı ile ilişkilendirebilirsiniz.
Aşağıdaki çalıştırın. Transact-SQL veritabanında:
CREATE TABLE BCPDate (cola int, colb datetime)
Uygulamanın çalıştırılacağı dizinindeki Bcpfmt.fmt adlı bir dosya ekleyin ve bu dosyaya ekleyin:
8.0 2 1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin 2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin
Uygulamanın çalıştırılacağı dizinindeki Bcpodbc.bcp adlı bir dosya ekleyin ve bu dosyaya ekleyin:
1 2
Derlemek ve C++ kod çalıştırmak artık hazırsınız.
// compile with: odbc32.lib sqlncli10.lib
#include <stdio.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <odbcss.h>
SQLHENV henv = SQL_NULL_HENV;
HDBC hdbc1 = SQL_NULL_HDBC;
void Cleanup() {
if (hdbc1 != SQL_NULL_HDBC) {
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
}
if (henv != SQL_NULL_HENV)
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
int main() {
RETCODE retcode;
SDWORD cRows;
// Allocate the ODBC environment and save handle.
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLAllocHandle(Env) Failed\n\n");
Cleanup();
return(9);
}
// Notify ODBC that this is an ODBC 3.0 app.
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLSetEnvAttr(ODBC version) Failed\n\n");
Cleanup();
return(9);
}
// Allocate ODBC connection handle, set BCP mode, and connect.
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLAllocHandle(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);
if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {
printf("SQLSetConnectAttr(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
// Sample uses Integrated Security. Create SQL Server DSN using Windows NT authentication.
retcode = SQLConnect(hdbc1, (UCHAR*)"Test", SQL_NTS, (UCHAR*)"", SQL_NTS, (UCHAR*)"", SQL_NTS);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("SQLConnect() Failed\n\n");
Cleanup();
return(9);
}
// Initialize the bulk copy.
retcode = bcp_init(hdbc1, "BCPDate", "BCPODBC.bcp", NULL, DB_IN);
if ( (retcode != SUCCEED) ) {
printf("bcp_init(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
// Read the format file.
retcode = bcp_readfmt(hdbc1, "BCPFMT.fmt");
if ( (retcode != SUCCEED) ) {
printf("bcp_readfmt(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
// Execute the bulk copy.
retcode = bcp_exec(hdbc1, &cRows);
if ( (retcode != SUCCEED) ) {
printf("bcp_exec(hdbc1) Failed\n\n");
Cleanup();
return(9);
}
printf("Number of rows bulk copied in = %d.\n", cRows);
// Cleanup
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
Değişiklik Geçmişi
Güncelleştirilmiş içerik |
---|
Örnek güncelleştirildi. |