#include "MyBCP.h"
#include "odbcss.h" //1,Allocate an environment handle and a connection handle.
//2,Set SQL_COPT_SS_BCP and SQL_BHCP_ON to enable bulk copy operations.
void CMyBCP::Initialize()
{
SQLRETURN l_uiReturn;
l_uiReturn=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&m_hEnvironment);
if( l_uiReturn!=SQL_SUCCESS && l_uiReturn!=SQL_SUCCESS_WITH_INFO ) return;
l_uiReturn=SQLSetEnvAttr(m_hEnvironment,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
if( l_uiReturn!=SQL_SUCCESS && l_uiReturn!=SQL_SUCCESS_WITH_INFO ) return;
l_uiReturn=SQLAllocHandle(SQL_HANDLE_DBC,m_hEnvironment,&m_hConnection);
if( l_uiReturn!=SQL_SUCCESS && l_uiReturn!=SQL_SUCCESS_WITH_INFO ) return;
l_uiReturn=SQLSetConnectAttr(m_hConnection,SQL_COPT_SS_BCP,(void *)SQL_BCP_ON,SQL_IS_INTEGER);
if( l_uiReturn!=SQL_SUCCESS && l_uiReturn!=SQL_SUCCESS_WITH_INFO ) return;
}; //3,Connect to SQL Server
void CMyBCP::ConnectToDB()
{
std::string dsn("DNS-MMLRESOLVE");
std::string user("sa");
std::string password("huawei123,");
SQLRETURN l_uiReturn;
l_uiReturn=SQLConnect(m_hConnection,
(UCHAR*)dsn.c_str(),SQL_NTS,
(UCHAR*)user.c_str(),SQL_NTS,
(UCHAR*)password.c_str(),SQL_NTS
);
}; //4,Call bcp_init to set the following information:
// .The name of the table or view to bulk copy from or to.
// .Specify NULL for the name of the data file.
// .The name of an data file to receive any bulk copy error messages(specify NULL
// if you do not want a message file).
// .The direction of the copy: DB_IN from the application to the view or table or
// DB_OUT to the application from the table or view.
void CMyBCP::call_bcp_init(std::string & tablename)
{
SQLRETURN l_uiReturn=bcp_init(m_hConnection,tablename.c_str(),NULL,NULL,DB_IN);
}; //5,Call bcp_bind for each column in the bulk copy to bind the column to a program variable
void CMyBCP::call_bcp_bind_char_field(char* pBlock, int colIndex)
{
RETCODE l_uiRETCODE=bcp_bind(m_hConnection,(LPCBYTE)pBlock, , SQL_VARLEN_DATA, (LPCBYTE)"\0", sizeof(WCHAR), SQLCHARACTER, colIndex);
if(l_uiRETCODE==SUCCEED)
{
printf("call_bcp_bind_char_field() ok!\n");
}
};
void CMyBCP::call_bcp_bind_int_field(int &iBlock, int colIndex)
{
RETCODE l_uiRETCODE=bcp_bind(m_hConnection,(BYTE *)&iBlock, , sizeof(DBINT), NULL, (INT)NULL, SQLINT4, colIndex);
if(l_uiRETCODE==SUCCEED)
{
printf("call_bcp_bind_int_field() ok!\n");
}
}; //6,Fill the program variables with data,and call bcp_sendrow to send a row of data.
void CMyBCP::call_bcp_sendrow()
{
RETCODE l_uiRETCODE=bcp_sendrow(m_hConnection);
if(l_uiRETCODE==SUCCEED)
{
printf("bcp_sendrow() ok!");
}
}; //7,After several rows have been sent,call bcp_batch to checkpoint the rows already sent.
//It is good practice to call bcp_batch at least once per 1000 rows.
void CMyBCP::call_bcp_batch()
{
DBINT l_uiDBINT=bcp_batch(m_hConnection);
}; //8,After all rows have been sent,call bcp_done to complete the operation.
void CMyBCP::call_bcp_done()
{
DBINT l_uiDBINT=bcp_done(m_hConnection);
}; CMyBCP::CMyBCP()
{
Initialize();
ConnectToDB();
}; CMyBCP::~CMyBCP()
{
if(m_hConnection!=SQL_NULL_HDBC)
{
SQLDisconnect(m_hConnection);
SQLFreeHandle(SQL_HANDLE_DBC, m_hConnection);
}
if(m_hEnvironment!=SQL_NULL_HENV)
{
SQLFreeHandle(SQL_HANDLE_ENV,m_hEnvironment);
}
};
#include <Windows.h>
#include <sqlext.h>
#include <string> #pragma comment(lib,"odbc32.lib")
#pragma comment(lib,"odbcbcp.lib")
#pragma comment(lib,"odbcbcp.lib") class CMyBCP
{
public:
CMyBCP();
~CMyBCP(); public:
//1,Allocate an environment handle and a connection handle.
//2,Set SQL_COPT_SS_BCP and SQL_BHCP_ON to enable bulk copy operations.
void Initialize(); //3,Connect to SQL Server
void ConnectToDB(); //4,Call bcp_init to set the following information:
// .The name of the table or view to bulk copy from or to.
// .Specify NULL for the name of the data file.
// .The name of an data file to receive any bulk copy error messages(specify NULL
// if you do not want a message file).
// .The direction of the copy: DB_IN from the application to the view or table or
// DB_OUT to the application from the table or view.
void call_bcp_init(std::string & tablename); //5,Call bcp_bind for each column in the bulk copy to bind the column to a program variable
//void call_bcp_bind();
void call_bcp_bind_char_field(char* pBlock, int colIndex);
void call_bcp_bind_int_field(int &iBlock, int colIndex); //6,Fill the program variables with data,and call bcp_sendrow to send a row of data.
void call_bcp_sendrow(); //7,After several rows have been sent,call bcp_batch to checkpoint the rows already sent.
//It is good practice to call bcp_batch at least once per 1000 rows.
void call_bcp_batch(); //8,After all rows have been sent,call bcp_done to complete the operation.
void call_bcp_done(); private:
HENV m_hEnvironment;
HDBC m_hConnection;
};
#include <iostream>
#include "MyBCP.h"

int main()
{
CMyBCP bcp;
std::string tablename("[p].[e_LOG_IOEXP]");
bcp.call_bcp_init(tablename);

int int_BSCFlg;
int int_ObjFlg;
std::string str_BSCNAME("");
std::string str_IDENTITY("BXB001A");
bcp.call_bcp_bind_int_field(int_BSCFlg,1);
bcp.call_bcp_bind_int_field(int_ObjFlg,2);
bcp.call_bcp_bind_char_field(const_cast<char *>(str_BSCNAME.c_str()),3);
bcp.call_bcp_bind_char_field(const_cast<char *>(str_IDENTITY.c_str()),4);

bcp.call_bcp_sendrow();
//bcp.call_bcp_batch();
bcp.call_bcp_done();

std::cout<<"Over"<<std::endl;
getchar();
return 0;
};

bcp功能的更多相关文章

  1. oracle数据库基础功能

    一.oracle基本常用的数据类型 varchar(长度) 字符串char(长度) 字符number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是99 ...

  2. 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗

    ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性:    Oracle.MYSQL与DB2可在所有主流平台上运行:    SQL Server只能在Windows下运行: --安 ...

  3. c#数据批量插入

    由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbS ...

  4. sqlserver中BCP命令导入导出

    个人自用导出文本文件命令: bcp [xxDB].[dbo].[xx_tb_name] out d:\temp\xxx.txt -c -t "\t" -T bcp是SQL Serv ...

  5. BCP导出导入大容量数据实践

    前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优缺点,以适用不同的需求.下面介绍大 ...

  6. BCP

    转:(总结) SQL Server Bulk Insert 批量数据导入 DB SQL ServerBulk InsertBCPOPENROWSET格式文件 SQL Server的Bulk Inser ...

  7. sql 2005,2008开启bcp的方法嗯哈步骤

    sqlserver 2008开启bcp服务的方法和步骤 sqlserver 2005开启bcp服务的方法和步骤 在开始菜单中找到sql server 2005 -->> 配置工具 --&g ...

  8. 数据库调优过程(一):SqlServer批量复制(bcp)[C#SqlBulkCopy]性能极低问题

    背景 最近一段给xx做项目,这边最头疼的事情就是数据库入库瓶颈问题. 环境 服务器环境:虚拟机,分配32CPU,磁盘1.4T,4T,5T,6T几台服务器不等同(转速都是7200r),内存64G. 排查 ...

  9. SSIS结合BCP及SQL Server作业实现定时将数据导出打包实现数据同步

    首先这个流程要实现的功能大致是: 有两台服务器,一台是对外网开发的,一台是内网的.那么很明显数据交互都是外网服务器在做,而这个流程要做的就是要将外网上面的数据定时同步到内网中. 我们依对其中某张表的操 ...

随机推荐

  1. docker安装(2016-08-25版本)

    . 通过命令对系统的版本进行查看 [root@localhost ~]# uname -a [root@localhost ~]# cat /etc/issue --> 如果是6.5之前的版本 ...

  2. English——Unit 2

    radiant radiate radical ideal ideology identical identification identify identity journal jounalist ...

  3. dotnet core多平台开发体验(mac os x 、windows、linux)

    前言 随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项 ...

  4. mycncart自定义主题

    本文是自己通过其他主题,自学的,如果有什么问题,可以提出建议? 参考资料:opencart官网 www.opencart.com  或 mycncart的官网上的一些教程 www.mycncart.c ...

  5. linux命令(22):mkdir命令

    实例1:创建一个空目录 mkdir  test 实例2:递归创建多个目录 mkdir  -p /home/test 实例3:创建权限为777的目录 mkdir -m 777 test 实例4:创建新目 ...

  6. hdu 3488(KM算法||最小费用最大流)

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  7. asp.net webform 打造私人后台管理系统(附源码)

    系统简介 git地址:https://github.com/qingfengjun/XSSystem 不少人让我做公司的网站,要求不多,但是需要有一个后台系统,所以就有了开发的动力.也想做个系统自己学 ...

  8. JavaScript 闭包(随笔)

    闭包,伟大的闭包.... 先看看百科对百度的定义是什么样的. 百科说:闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境 ...

  9. hihoCoder #1870 : Jin Yong’s Wukong Ranking List-闭包传递(递归) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction A) 2018 ICPC 北京区域赛现场赛A

    P1 : Jin Yong’s Wukong Ranking List Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Desc ...

  10. NOIP2018 提高组题解

    Day1 T1 据说是原题积木大赛,但是考场上蠢了,只会写数据结构,于是写了一个线段树\(+\)堆\(+\)贪心,先选出最小的,然后区间修改,然后把左右两端区间的最小值丢进堆里,不停从堆中去最小值更新 ...