Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
bcp_setbulkmode stelt je in staat het kolomformaat te specificeren in een bulk-kopieeroperatie, waarbij alle kolomattributen in één functie worden ingesteld.
Syntax
RETCODE bcp_setbulkmode (
HDBC hdbc,
INT property,
void * pField,
INT cbField,
void * pRow,
INT cbRow
);
Arguments
hdbc-
De ODBC-verbindingshandle die met bulk wordt gekopieerd.
eigenschap
Een constante van het type BYTE. Zie de tabel in de sectie Opmerkingen voor een lijst van de constanten.
pField
De pointer naar de waarde van de veldterminator.
cbField
De lengte (in bytes) van de waarde van de veldterminator.
pRow
De aanwijzer naar de waarde van de rijterminator.
cbRow
De lengte in bytes van de waarde van de rijterminator.
Returns
SUCCES OF MISLUK
Remarks
bcp_setbulkmode kan worden gebruikt om bulk te kopiëren uit zowel een query als een tabel. Wanneer bcp_setbulkmode wordt gebruikt om een query-instructie in bulk te kopiëren, moet deze worden aangeroepen voordat bcp_control met BCP_HINT wordt aangeroepen.
bcp_setbulkmode is een alternatief voor het gebruik van bcp_setcolfmt en bcp_columns, waarmee je alleen het formaat van één kolom per functieaanroep kunt specificeren.
De volgende tabel geeft de constanten voor de eigenschapsparameter weer.
| Property | Description |
|---|---|
| BCP_OUT_CHARACTER_MODE | Specificeert de karakteruitvoermodus. Komt overeen met de -c-optie in BCP.EXE, en met bcp_setcolfmt met BCP_FMT_TYPE eigenschap ingesteld op SQLCHARACTER. |
| BCP_OUT_WIDE_CHARACTER_MODE | Specificeert Unicode-uitvoermodus. Komt overeen met de -w-optie in BCP.EXE en bcp_setcolfmt met BCP_FMT_TYPE eigenschap ingesteld op SQLNCHAR. |
| BCP_OUT_NATIVE_TEXT_MODE | Specificeert native types voor niet-tekentypes en Unicode voor tekentypes. Komt overeen met de -N-optie in BCP.EXE en bcp_setcolfmt met BCP_FMT_TYPE eigenschap ingesteld op SQLNCHAR als het kolomtype een string is (standaard als het geen string is). |
| BCP_OUT_NATIVE_MODE | Specificeert native databasetypes. Komt overeen met de -n-optie in BCP.EXE en bcp_setcolfmt met BCP_FMT_TYPE eigenschap op standaard gezet. |
Je moet bcp_setbulkmode niet gebruiken met een reeks functieaanroepen die bcp_setcolfmt, bcp_control en bcp_readfmt omvat. Je moet bijvoorbeeld niet bcp_control(BCPTEXTFILE) en bcp_setbulkmode aanroepen.
Je kunt bcp_control bellen en bcp_setbulkmode voor bcp_control opties die niet conflicteren met bcp_setbulkmode. Je kunt bijvoorbeeld bcp_control(BCPFIRST) en bcp_setbulkmode bellen.
Als je probeert bcp_setbulkmode aan te roepen met een reeks functieaanroepen die bcp_setcolfmt, bcp_control en bcp_readfmt bevat, zal een van de functieaanroepen een foutfout in de volgorde teruggeven. Als je ervoor kiest de storing te corrigeren, bel bcp_init dan om alle instellingen te resetten en opnieuw te beginnen.
Hieronder volgen enkele voorbeelden van functieaanroepen die resulteren in een functiesequentiefout:
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();
Example
Het volgende voorbeeld maakt vier bestanden aan met verschillende instellingen van bcp_setbulkmode.
// 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"));
}