Bagikan melalui


bcp_setbulkmode

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

bcp_setbulkmode memungkinkan Anda menentukan format kolom dalam operasi penyalinan massal, mengatur semua atribut kolom dalam satu panggilan fungsi.

Sintaks

  
RETCODE bcp_setbulkmode (  
   HDBC hdbc,  
   INT property,  
   void * pField,  
   INT cbField,  
   void * pRow,  
   INT cbRow  
);  

Argumen

hdbc
Handel koneksi ODBC yang mendukung penyalinan massal.

property
Konstanta jenis BYTE. Lihat tabel di bagian Keterangan untuk daftar konstanta.

pField
Penunjuk ke nilai terminator bidang.

cbField
Panjang (dalam byte) dari nilai terminator bidang.

haluan
Penunjuk ke nilai terminator baris.

cbRow
Panjang dalam byte dari nilai terminator baris.

Mengembalikan

BERHASIL atau GAGAL

Keterangan

bcp_setbulkmode dapat digunakan untuk menyalin secara massal dari kueri atau tabel. Saat bcp_setbulkmode digunakan untuk menyalin pernyataan kueri secara massal, pernyataan kueri harus dipanggil sebelum memanggil bcp_control dengan BCP_HINT.

bcp_setbulkmode adalah alternatif untuk menggunakan bcp_setcolfmt dan bcp_columns, yang hanya memungkinkan Anda menentukan format satu kolom per panggilan fungsi.

Tabel berikut mencantumkan konstanta untuk parameter properti .

Properti Deskripsi
BCP_OUT_CHARACTER_MODE Menentukan mode output karakter.

Sesuai dengan opsi -c di BCP.EXE, dan untuk bcp_setcolfmt dengan properti BCP_FMT_TYPE diatur ke SQLCHARACTER.
BCP_OUT_WIDE_CHARACTER_MODE Menentukan mode output Unicode.

Sesuai dengan opsi -w di BCP.EXE dan bcp_setcolfmt dengan properti BCP_FMT_TYPE diatur ke SQLNCHAR.
BCP_OUT_NATIVE_TEXT_MODE Menentukan jenis asli untuk jenis non-karakter dan Unicode untuk jenis karakter.

Sesuai dengan opsi -N di BCP.EXE dan bcp_setcolfmt dengan properti BCP_FMT_TYPE diatur ke SQLNCHAR jika jenis kolom adalah string (default jika bukan string).
BCP_OUT_NATIVE_MODE Menentukan jenis database asli.

Sesuai dengan opsi -n di BCP.EXE dan bcp_setcolfmt dengan properti BCP_FMT_TYPE diatur ke default.

Anda tidak boleh menggunakan bcp_setbulkmode dengan urutan panggilan fungsi yang mencakup bcp_setcolfmt, bcp_control, dan bcp_readfmt. Misalnya, Anda tidak boleh memanggil bcp_control(BCPTEXTFILE) dan bcp_setbulkmode.

Anda dapat memanggil bcp_control dan bcp_setbulkmode untuk opsi bcp_control yang tidak bertentangan dengan bcp_setbulkmode. Misalnya, Anda dapat memanggil bcp_control(BCPFIRST) dan bcp_setbulkmode.

Jika Anda mencoba memanggil bcp_setbulkmode dengan urutan panggilan fungsi yang mencakup bcp_setcolfmt, bcp_control, dan bcp_readfmt, salah satu panggilan fungsi akan mengembalikan kegagalan kesalahan urutan. Jika Anda memilih untuk memperbaiki kegagalan, panggil bcp_init untuk mengatur ulang semua pengaturan dan memulai kembali.

Di bawah ini adalah beberapa contoh panggilan fungsi yang mengakibatkan kesalahan urutan fungsi:

bcp_init("table", DB_IN);  
bcp_setbulkmode();  
bcp_init("table", DB_OUT);  
bcp_setbulkmode();  
bcp_readfmt();  
bcp_init(NULL, DB_OUT);  
bcp_control(BCPHINTS, "select ...");  
bcp_setbulkmode();  
bcp_init("table", DB_OUT);  
bcp_setbulkmode();  
bcp_setcolfmt();  
bcp_init("table", DB_OUT);  
bcp_control(BCPDELAYREADFMT, true);  
bcp_readfmt();  
bcp_setcolfmt();  
bcp_init(NULL, DB_OUT);  
bcp_control(BCPDELAYREADFMT, true);  
bcp_setbulkmode();  
bcp_control(BCPHINTS, "select ...");  
bcp_readfmt();  
bcp_init("table", DB_OUT);  
bcp_control(BCPDELAYREADFMT, true);  
bcp_columns();  
bcp_init("table", DB_OUT);  
bcp_control(BCPDELAYREADFMT, true);  
bcp_setcolfmt();  

Contoh

Sampel berikut membuat empat file menggunakan pengaturan bcp_setbulkmode yang berbeda.

// compile with: sqlncli11.lib odbc32.lib  
  
#include <windows.h>  
#include <stdio.h>  
#include <tchar.h>  
#include <sqlext.h>  
#include "sqlncli.h"  
  
// Global variables  
SQLHENV g_hEnv = NULL;  
SQLHDBC g_hDbc = NULL;  
  
void ODBCCleanUp() {  
   if (g_hDbc) {  
      SQLDisconnect(g_hDbc);  
      SQLFreeHandle(SQL_HANDLE_DBC, g_hDbc);  
      g_hDbc = NULL;  
   }  
   if (g_hEnv) {  
      SQLFreeHandle(SQL_HANDLE_ENV, g_hEnv);  
      g_hEnv = NULL;  
   }  
}  
  
BOOL MakeODBCConnection(TCHAR * pszServer) {  
   TCHAR szConnectionString[500];  
   TCHAR szOutConnectionString[500];  
   SQLSMALLINT iLen;  
   SQLRETURN rc;  
  
   _sntprintf_s(szConnectionString, 500, TEXT("DRIVER={SQL Server Native Client 11.0};Server=%s;Trusted_connection=yes;"), pszServer);  
   rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE,&g_hEnv);  
   if (SQL_SUCCESS != rc && SQL_SUCCESS_WITH_INFO != rc) {  
      printf("SQLAllocHandle(SQL_HANDLE_ENV...) failed\n");  
      return false;  
   }  
   rc = SQLSetEnvAttr(g_hEnv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_UINTEGER);  
   if (SQL_SUCCESS != rc && SQL_SUCCESS_WITH_INFO != rc) {  
      printf("SQLSetEnvAttr failed\n");  
      SQLFreeHandle(SQL_HANDLE_ENV, g_hEnv);  
      return false;  
   }  
   rc = SQLAllocHandle( SQL_HANDLE_DBC, g_hEnv , &g_hDbc);  
   if (SQL_SUCCESS != rc && SQL_SUCCESS_WITH_INFO != rc) {  
      printf("SQLAllocHandle(SQL_HANDLE_DBC...) failed\n");  
      SQLFreeHandle(SQL_HANDLE_ENV, g_hEnv);  
      return false;  
   }  
   // Enable BCP  
   rc = SQLSetConnectAttr(g_hDbc, SQL_COPT_SS_BCP, (SQLPOINTER)SQL_BCP_ON, SQL_IS_INTEGER);  
   if (SQL_SUCCESS != rc && SQL_SUCCESS_WITH_INFO != rc) {  
      printf("SQLSetConnectAttr(.. SQL_COPT_SS_BCP, (SQLPOINTER)SQL_BCP_ON ...) failed\n");  
      ODBCCleanUp();  
      return false;  
   }  
   // connecting ...  
   rc = SQLDriverConnect(g_hDbc,NULL, (SQLTCHAR*)szConnectionString, SQL_NTS, (SQLTCHAR*)szOutConnectionString, 500, &iLen, SQL_DRIVER_NOPROMPT);  
   if (SQL_SUCCESS != rc && SQL_SUCCESS_WITH_INFO != rc) {  
      printf("SQLDriverConnect(SQL_HANDLE_DBC...) failed\n");  
      ODBCCleanUp();  
      return false;  
   }  
   return true;  
}  
  
BOOL BCPSetBulkMode(TCHAR * pszServer, TCHAR * pszQureryOut, char BCPType, TCHAR * pszDataFile) {  
   SQLRETURN rc;  
  
   if (!MakeODBCConnection(pszServer))  
      return false;  
   rc = bcp_init(g_hDbc, NULL, pszDataFile, NULL, DB_OUT);   // bcp init for queryout  
   if (SUCCEED != rc) {  
      printf("bcp_init failed\n");  
      ODBCCleanUp();  
      return false;  
   }  
   // setbulkmode  
   char ColTerm[] = "\t";  
   char RowTerm[] = "\r\n";  
   wchar_t wColTerm[] = L"\t";  
   wchar_t wRowTerm[] = L"\r\n";  
   BYTE * pColTerm = NULL;  
   int cbColTerm = NULL;  
   BYTE * pRowTerm = 0;  
   int cbRowTerm = 0;  
   int bulkmode = -1;  
  
   if (BCPType == 'c') {   // bcp -c  
      pColTerm = (BYTE*)ColTerm;  
      pRowTerm = (BYTE*)RowTerm;  
      cbColTerm = 1;  
      cbRowTerm = 2;  
      bulkmode = BCP_OUT_CHARACTER_MODE;  
   }  
   else  
      if (BCPType == 'w') {   // bcp -w   
         pColTerm = (BYTE*)wColTerm;  
         pRowTerm = (BYTE*)wRowTerm;  
         cbColTerm = 2;  
         cbRowTerm = 4;  
         bulkmode = BCP_OUT_WIDE_CHARACTER_MODE;  
      }  
      else  
         if (BCPType == 'n')   // bcp -n  
            bulkmode = BCP_OUT_NATIVE_MODE;  
         else  
            if (BCPType == 'N')   // bcp -n  
               bulkmode = BCP_OUT_NATIVE_TEXT_MODE;  
            else {  
               printf("unknown bcp mode\n");  
               ODBCCleanUp();  
               return false;  
            }  
            rc = bcp_setbulkmode(g_hDbc, bulkmode, pColTerm, cbColTerm, pRowTerm, cbRowTerm);  
            if (SUCCEED != rc) {  
               printf("bcp_setbulkmode failed\n");  
               ODBCCleanUp();  
               return false;  
            }  
            // set queryout T-SQL statement  
            rc = bcp_control(g_hDbc, BCPHINTS , pszQureryOut);  
            if (SUCCEED != rc) {  
               printf("bcp_control(..BCP_OPTION_HINTS..) failed\n");  
               ODBCCleanUp();  
               return false;  
            }  
            // bcp copy  
            DBINT nRowsInserted = 0;  
            rc = bcp_exec(g_hDbc, &nRowsInserted);  
            if (SUCCEED != rc) {  
               printf("bcp_exec failed\n");  
               ODBCCleanUp();  
               return false;  
            }  
            printf("bcp done\n");  
            ODBCCleanUp();  
            return true;  
}  
  
int main() {  
   BCPSetBulkMode(TEXT("localhost"), TEXT("SELECT 'this is a bcp -c test', 1,2") , 'c', TEXT("bcpc.dat"));  
   BCPSetBulkMode(TEXT("localhost"), TEXT("SELECT 'this is a bcp -w test', 1,2") , 'w', TEXT("bcpw.dat"));  
   BCPSetBulkMode(TEXT("localhost"), TEXT("SELECT 'this is a bcp -c test', 1,2") , 'n', TEXT("bcpn.dat"));  
   BCPSetBulkMode(TEXT("localhost"), TEXT("SELECT 'this is a bcp -w test', 1,2") , 'N', TEXT("bcp_N.dat"));  
}  

Lihat Juga

Fungsi Salin Massal