Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Toplu kopyalama işlemini başlatır.
Sözdizimi
RETCODE bcp_init (
HDBC hdbc,
LPCTSTR szTable,
LPCTSTR szDataFile,
LPCTSTR szErrorFile,
INT eDirection);
Unicode ve ANSI adları:
- bcp_initA (ANSI)
- bcp_initW (Unicode)
Bağımsız değişken
hdbc
Toplu kopyalama özellikli ODBC bağlantı tutamacıdır.
szTable
Kopyalanacak veya kopyalanacak veritabanı tablosunun adıdır. Bu ad, veritabanı adını veya sahip adını da içerebilir. Örneğin, pubs.gracie.titles
eDirection DB_OUT ise, szTable veritabanı görünümünün adı da olabilir.
eDirection DB_OUT ve select deyimi bcp_exec çağrılmadan önce bcp_control kullanılarak belirtilirse, bcp_initszTable NULL olarak ayarlanmalıdır.
szDataFile
Kopyalanacak veya kopyalanacak kullanıcı dosyasının adıdır. veriler bcp_sendrowkullanılarak doğrudan değişkenlerden kopyalanıyorsa szDataFile değerini NULL olarak ayarlayın.
szErrorFile
İlerleme iletileri, hata iletileri ve herhangi bir nedenle bir kullanıcı dosyasından tabloya kopyalanamayan satırların kopyaları ile doldurulacak hata dosyasının adıdır. NULL szErrorFileolarak geçirilirse, hiçbir hata dosyası kullanılmaz.
eDirection
DB_IN veya DB_OUT kopyanın yönüdür. DB_IN, program değişkenlerinden veya kullanıcı dosyasından tabloya kopyayı gösterir. DB_OUT, veritabanı tablosundan kullanıcı dosyasına kopyayı gösterir. DB_OUT ile bir kullanıcı dosyası adı belirtmeniz gerekir.
Döndürür
BAŞARI VEYA BAŞARISIZ.
Açıklamalar
Başka bir toplu kopyalama işlevini çağırmadan önce bcp_init çağır. bcp_init, iş istasyonu ile SQL Server arasında verilerin toplu bir kopyası için gerekli başlatmaları gerçekleştirir.
bcp_init işlevi, toplu kopyalama işlevleriyle kullanılmak üzere etkinleştirilmiş bir ODBC bağlantı tutamacı ile sağlanmalıdır. Tanıtıcıyı etkinleştirmek için sqlsetconnectattr
Bir veri dosyası belirtildiğinde bcp_init veri dosyasının değil veritabanı kaynağının veya hedef tablonun yapısını inceler. bcp_init veritabanı tablosundaki, görünümdeki veya SELECT sonuç kümesindeki her sütunu temel alarak veri dosyası için veri biçimi değerlerini belirtir. Bu belirtim her sütunun veri türünü, verilerdeki uzunluk veya null gösterge ve sonlandırıcı bayt dizelerinin varlığını veya yokluğunu ve sabit uzunluklu veri türlerinin genişliğini içerir. bcp_init bu değerleri aşağıdaki gibi ayarlar:
Belirtilen veri türü, veritabanı tablosu, görünümü veya SELECT sonuç kümesindeki sütunun veri türüdür. Veri türü, sqlncli.h içinde belirtilen SQL Server yerel veri türleri tarafından numaralandırılır. Veriler kendi bilgisayar biçiminde temsil edilir. Diğer bir ifadeyle, tamsayı veri türündeki bir sütundaki veriler, veri dosyasını oluşturan bilgisayar temelinde büyük veya küçük endian olan 4 baytlık bir diziyle temsil edilir.
Veritabanı veri türü uzunluğu sabitse, veri dosyası verileri de uzunluk olarak sabittir. Veri dosyasındaki verilerin uzunluğunun veritabanı tablosunda, görünümde veya SELECT sütun listesinde belirtilen verilerin uzunluğuyla aynı olmasını bekleyen veri satırlarını ayrıştıran verileri işleyen toplu kopyalama işlevleri (örneğin, bcp_exec). Örneğin, char(13) olarak tanımlanan bir veritabanı sütununun verileri, dosyadaki her veri satırı için 13 karakterle gösterilmelidir. Veritabanı sütunu null değerlere izin veriyorsa sabit uzunluktaki verilere null gösterge ön eki eklenebilir.
Sonlandırıcı bayt dizisi tanımlandığında, terminatör bayt dizisinin uzunluğu 0 olarak ayarlanır.
SQL Server'a kopyalarken, veri dosyasının veritabanı tablosundaki her sütun için veri içermesi gerekir. SQL Server'dan kopyalama sırasında veritabanı tablosundaki, görünümdeki veya SELECT sonuç kümesindeki tüm sütunlardaki veriler veri dosyasına kopyalanır.
SQL Server'a kopyalarken, veri dosyasındaki bir sütunun sıralı konumu, veritabanı tablosundaki sütunun sıralı konumuyla aynı olmalıdır. SQL Server'dan kopyalarken, bcp_exec verileri veritabanı tablosundaki sütunun sıralı konumuna göre yerleştirir.
Veritabanı veri türünün uzunluğu değişkense (örneğin, varbinary(22)) veya veritabanı sütunu null değerler içerebiliyorsa, veri dosyasındaki veriler uzunluk/null göstergesiyle önek alır. Göstergenin genişliği, toplu kopyalamanın veri türüne ve sürümüne göre değişir.
Veri dosyası için belirtilen veri biçimi değerlerini değiştirmek için bcp_columns'ı çağırıp bcp_colfmt.
SQL Server'a toplu kopyalar, veritabanı kurtarma modeli SIMPLE veya BULK_LOGGED olarak ayarlanarak dizin içermeyen tablolar için iyileştirilebilir. Daha fazla bilgi için bkz.
Hiçbir veri dosyası kullanılmazsa, her sütun için verilerin belleğindeki biçimi ve konumu belirtmek için bcp_bind çağırmanız ve ardından bcp_sendrowkullanarak veri satırlarını SQL Server'a kopyalamanız gerekir.
Örnek
Bu örnek, ODBC bcp_init işlevinin bir biçim dosyasıyla nasıl kullanılacağını gösterir.
C++ kodunu derlemeden ve çalıştırmadan önce aşağıdaki adımları uygulamanız gerekir:
Test adlı bir ODBC veri kaynağı oluşturun. Bu veri kaynağını herhangi bir veritabanıyla ilişkilendirebilirsiniz.
Veritabanında aşağıdaki Transact-SQL çalıştırın:
CREATE TABLE BCPDate (cola int, colb datetime);Uygulamayı çalıştırdığınız dizine Bcpfmt.fmt adlı bir dosya ekleyin ve bu içeriği dosyaya ekleyin:
8.0 2 1SQLCHAR04"\t"1colaSQL_Latin1_General_Cp437_Bin 2SQLCHAR08"\r\n"2colbSQL_Latin1_General_Cp437_BinUygulamayı çalıştırdığınız dizine Bcpodbc.bcp adlı bir dosya ekleyin ve dosyaya içerik ekleyin:
1 2
Artık C++ kodunu derlemeye ve çalıştırmaya hazırsınız.
// compile with: odbc32.lib sqlncli11.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);
}