bcp_init
Toplu kopyalama işlemi başlatır.
Sözdizimi
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ı olduğunu.szTable
İçine veya dışına kopyalanacak veritabanında tablonun adıdır. Bu ad, veritabanı veya sahibinin adını da içerebilir. Örneğin, pubs.gracie.titles, barlar...Başlık, gracie.titles, ve başlıkları tüm yasal tablo adları vardır.Eğer eDirection db_out, ise szTable bir veritabanı görünümü adı da olabilir.
Eğer eDirection db_out ise ve bir select deyimi kullanılarak belirtilen bcp_control önce bcp_exec adı verilen bcp_initszTable null olarak ayarlanmalıdır.
szDataFile
İçine veya dışına kopyalanacak kullanıcı dosya adıdır. Verileri doğrudan değişkenleri kullanarak kopyalandığı, bcp_sendrowSet szDataFile NULL.szErrorFile
İlerleme iletileri, hata iletileri ve kopyaları, herhangi bir nedenle, tabloya bir kullanıcı dosya kopyalanamadı herhangi bir satır ile doldurulması için hata dosyasının adıdır. Eğer null olarak geçirilen szErrorFile, hiçbir hata dosyası kullanılır.eDirection
Kopya yönü veya db_out yönüdür. Program değişkenleri veya kullanıcı dosyası kopyasından tablo yönü gösterir. Bir veritabanı tablosunun bir kopyasından bir kullanıcı dosya db_out gösterir. db_out bir kullanıcı dosya adı belirtmelisiniz.
Döner
BAŞARILI veya başarısız.
Açıklamalar
Arama bcp_init başka bir toplu kopyalama işlevi çağırmadan önce. bcp_init iş istasyonu arasında veri kopyasını toplu gerekli başlatmaları gerçekleştirir ve SQL Server.
Bcp_init işlevi, etkin toplu kopyalama işlevleri ile kullanmak için bir odbc bağlantı tanıtıcısı ile sağlanmalıdır. Tutamacını etkinleştirmek için SQLSetConnectAttr ile sql_copt_ss_bcp bir ayrılmış, ancak bağlı değil, bağlantı tanıtıcısı üzerinde sql_bcp_on için ayarlayın. Hatayla sonuçlanır özniteliği bağlı bir tanıtıcı atamak çalışıyor.
Veri dosyası belirtildiğinde bcp_init veritabanı kaynak veya hedef tablo, veri dosyasının yapısını inceliyor. bcp_init veritabanı tablo, görünüm veya select sonuç kümesi her sütunu temel alan veri dosyası için veri biçimi değerleri belirtir. Bu belirtim, varlığı veya yokluğu bir uzunluk veya null göstergesi ve Sonlandırıcı bayt dizeleri veri ve genişliğini sabit uzunluklu veri türleri her sütunun veri türünü içerir. bcp_init bu değerler aşağıdaki gibi belirler:
Belirtilen veri türü, veritabanında tablo, görünüm veya select sonuç kümesi sütun veri türüdür. Veri türü, tarafından numaralandırılan SQL Serversqlncli.h belirtilen yerel veri türlerini. Verinin kendisi bilgisayar haliyle temsil edilir. Yani, bir sütundaki verileri Tamsayı veri türü büyük dört bayt sırası tarafından temsil edilen- veya little-endian oluşturulan veri dosyası bilgisayara bağlı.
Veritabanı veri türü, uzunluğu sabittir, veri dosyası verileri de uzunluğu sabittir. Veri işleme toplu kopyalama işlevleri (örneğin, bcp_exec) veritabanı tablo, görünüm veya Seç sütun listesi içinde belirtilen veri uzunluğu aynı olması veri dosyasındaki verilerin uzunluğunu bekliyor veri satır ayrıştırılamadı. Örneğin, veri olarak tanımlanan veritabanı sütun char(13) gösterdiği veri dosyasındaki her satır için 13 karakter olmalıdır. Veritabanı sütun boş değerlere izin verirseniz sabit uzunluklu veri boş bir göstergesi ile öneki.
Sonlandırıcı bayt sırası tanımlandığında, Sonlandırıcı bayt sırası uzunluğu 0 olarak ayarlanır.
Kopyalama sırasında SQL Server, veri dosyasındaki her sütun için veri veritabanı tablosunda olmalı. Kopyalama sırasında SQL Server, tüm sütunları veritabanı tablo, görünüm veya seçme sonuç kümesi verileri veri dosyasına kopyalanır.
Kopyalama sırasında SQL Server, veri dosyasındaki sütun sıralı konumunu veritabanı tablosunu sütun sıralı konumunu aynı olmalıdır. Kopyalama sırasında SQL Server, bcp_exec veritabanı tablosunu sütun sıralı konumunu temel veri yerleştirir.
Veritabanı veri türü değişken uzunluğu ise (örneğin, varbinary(22)) veya bir veritabanı sütunu null değerleri içeriyorsa, verileri veri dosyasında bir uzunluk/null göstergesi konduğundan. Gösterge genişliği veri türü ve toplu kopyalama sürümüne göre değişir.
Veri dosyası için belirtilen veri biçimi değerleri değiştirmek için bcp_columns ve bcp_colfmt.
Toplu kopya SQL Server, dizin veritabanı kurtarma modelini basit veya bulk_logged olarak ayarlayarak olmayan tablolar için en iyi duruma getirilebilir. Daha fazla bilgi için Optimizing Bulk Copy Performanceve alter database.
Hiçbir veri dosyası kullanılırsa, aramak gerekir bcp_bind biçimi ve konumu veri fsor anısına her sütun belirtmek için ardından veri satırları kopyalayın SQL Serverkullanarak bcp_sendrow.
Örnek
Bu örnek bir biçim dosyası ile odbc bcp_init işlevi kullanmayı gösterir.
Derlemek ve c++ kod çalıştırmak için önce aşağıdakileri yapmanız gerekir:
Test adlı bir odbc veri kaynağı oluşturun. Bu veri kaynağını herhangi bir veritabanı ile ilişkilendirebilirsiniz.
Aşağıdaki komutu çalıştırın Transact-SQLveritabanı:
CREATE TABLE BCPDate (cola int, colb datetime) CREATE TABLE BCPDate (cola int, colb datetime)
Burada uygulama çalışacaktır dizini, 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 8.0 2 1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin 2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_Bin
Burada uygulama çalışacaktır dizini, Bcpodbc.bcp adlı bir dosya ekleyin ve bu dosyaya ekleyin:
1 2 1 2
Artık derlemek ve c++ kod çalıştırmak 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);
}
// 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);
}