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作业实现定时将数据导出打包实现数据同步
首先这个流程要实现的功能大致是: 有两台服务器,一台是对外网开发的,一台是内网的.那么很明显数据交互都是外网服务器在做,而这个流程要做的就是要将外网上面的数据定时同步到内网中. 我们依对其中某张表的操 ...
随机推荐
- 2017多校第7场 HDU 6128 Inverse of sum 推公式或者二次剩余
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6128 题意:给你n个数,问你有多少对i,j,满足i<j,并且1/(ai+aj)=1/ai+1/a ...
- yml格式
是什么? yml文件扩展名是YAML的缩写,YAML于2001年出现,是一种数据描述语言,和xml类似 为什么用它? 我们在做javaweb项目的时候最常见的就是.xml配置文件和properitie ...
- Nginx-1.6.3反向代理
源码安装nginx cat /etc/redhat-release uname -rm yum install pcre-devel openssl-devel -y rpm -qa pcre pcr ...
- 使用 Visual Studio 部署 .NET Core 应用 ——ASP.NET Core 发布的具体操作
ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...
- jdbc连接远程数据库进行操作
链接远程数据库的时候,要把获得链接的url进行修改 1 package com.test; import java.sql.Connection; import java.sql.DriverMana ...
- django开发项目实例2--如何链接图片和css文件(静态文件)
在上一篇随笔里面,我们已经介绍了如何从零开始用django建立一个项目并且初步运行以来了, 现在我们就要开始写我们的html了,也就是django里面的模板了,不过这节我们只讲如何链接图片和css(静 ...
- powershell常用操作
创建文件 New-Item -path $file_path -itemtype file 创建目录 New-Item -path $dir_path -type directory 删除目录 Rem ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &quo ...
- 使用GitLab进行落地项目的管理,并且自动更新、重启、回滚
Gitlab 清空项目历史commit,节省空间 http://blog.csdn.net/dounine/article/details/77840416?locationNum=6&f ...
- GT-----如何做Android应用流量测试?
1.如何判断一个应用的流量偏高? 如果看流量的绝对值看不出高低,那就找几个同类型的产品对比一下,如果完成同样的事物,被测应用比同类产品高很多,那就偏高了,可能有优化的空间. 2.如何找到有效的优化点? ...