bcp功能
#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 "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功能的更多相关文章
- oracle数据库基础功能
一.oracle基本常用的数据类型 varchar(长度) 字符串char(长度) 字符number(x,y) x表示总位数 y表示保留小数点后几位数 eg面试题:number(5,3)最大的数是99 ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- c#数据批量插入
由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbS ...
- sqlserver中BCP命令导入导出
个人自用导出文本文件命令: bcp [xxDB].[dbo].[xx_tb_name] out d:\temp\xxx.txt -c -t "\t" -T bcp是SQL Serv ...
- BCP导出导入大容量数据实践
前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优缺点,以适用不同的需求.下面介绍大 ...
- BCP
转:(总结) SQL Server Bulk Insert 批量数据导入 DB SQL ServerBulk InsertBCPOPENROWSET格式文件 SQL Server的Bulk Inser ...
- sql 2005,2008开启bcp的方法嗯哈步骤
sqlserver 2008开启bcp服务的方法和步骤 sqlserver 2005开启bcp服务的方法和步骤 在开始菜单中找到sql server 2005 -->> 配置工具 --&g ...
- 数据库调优过程(一):SqlServer批量复制(bcp)[C#SqlBulkCopy]性能极低问题
背景 最近一段给xx做项目,这边最头疼的事情就是数据库入库瓶颈问题. 环境 服务器环境:虚拟机,分配32CPU,磁盘1.4T,4T,5T,6T几台服务器不等同(转速都是7200r),内存64G. 排查 ...
- SSIS结合BCP及SQL Server作业实现定时将数据导出打包实现数据同步
首先这个流程要实现的功能大致是: 有两台服务器,一台是对外网开发的,一台是内网的.那么很明显数据交互都是外网服务器在做,而这个流程要做的就是要将外网上面的数据定时同步到内网中. 我们依对其中某张表的操 ...
随机推荐
- 【Educational Codeforces Round 22】
又打了一场EDU,感觉这场比23难多了啊…… 艹还是我太弱了. A. 随便贪心一下. #include<bits/stdc++.h> using namespace std; ,ans=- ...
- node.js3
第一部分:express(MVC) 1.下载express npm install express --save 2.引入express require('express') 中间件 body-par ...
- tornado 模版继承 函数和类的调用
模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...
- HIbernate学习笔记4 之 延迟加载和 关联映射
一.延迟加载 * 在使用hibernate一些方法的查询数据的时候,返回的只是一个空对象(除id外属性都为NULL),并没有真正的查询数据库,而是在使用这个对象时才会触发查询数据库,并将这些数据注入到 ...
- Combination Sum I&&II(经典的回溯算法题)
I: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C w ...
- CentOS7.3安装electronic-wechat
方法一.简单粗暴 1.到https://github.com/geeeeeeeeek/electronic-wechat/找到最新的安装包linux-x64.tar.gz 2.解压tar -zxvf ...
- bzoj1030 AC自动机+dp
思路:建状态图,在状态图上dp. #include<bits/stdc++.h> #define LL long long #define ll long long #define fi ...
- tomcat放置静态html页面
因公司tomcat网站需要部署一个html的静态网页上去 在项目目录下建立了一个 /usr/local/tomcat/apache-tomcat-brain-api/webapps/ROOT/html ...
- PTA L2-002 链表去重 团体程序设计天梯赛-练习集
L2-002 链表去重(25 分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另 ...
- 在mac上无法使用Android Studio的解决方法
随着android Studio 1.0的正式发布,估计使用的人会越来越多,并且官网上现在已经没有融合好的eclipse下载了,官方推荐下载android Studio.之前的beta版我也安装过,好 ...