PROC++批量导入导出ORACLE数据库表

来源:Oracle认证    发布时间:2012-11-12    Oracle认证视频    评论

最近在开发一个项目中,为了解决数据库IO瓶颈,不得不把数据库中的数据导出为文本文件。文本传到客户端后又要导入到数据库。本人用C++Builder嵌入PROC++写了一个导入导出的DLL。如果对你有用深感荣幸!详细内容如下:

一、准备工作

计算机环境:Win 2000 PRO,ORACLE 9i,C++ Builder 5.5

引入必要的ORACLE内部函数:要用的函数在$(ORACEL_HOME)/bin qlora9.dll链接库中。为了能在C++ Builder中使用,先得生成LIB:implib sqlora9.lib sqlora9.dll

二、源文件分析

//-------------------------------------------------------------------------

//加入必要的头文件

#include<vcl.h> #include<windows.h> #include<stdio.h> #include<stdlib.h> #include<string.h>

#include<time.h> #include<math.h> #include<fcntl.h> #include<io.h> #include<sys tat.h>

//说明DLL的输出函数

extern "C" _declspec(dllexport) int _stdcall ConnectDB(const char *Username,

                                const char *Password, const char *Dbname);

extern "C" _declspec(dllexport) int _stdcall ImportTxtfile(TList *LengthArray,

                                String *FieldArray, const char *TableName,

                                const char *FileName);

extern "C" _declspec(dllexport) int _stdcall ExportTxtfile(const char *Sql,

                                const char *FileName);

#pragma hdrstop

//----------------------------------------------------------------------------

#define MAX_ITEMS 20        //定义最大字段数

#define MAX_VNAME_LEN 30  //定义选择表项最大长度

#define MAX_INAME_LEN 30  //定义指示器变量名字的最大长度

EXEC SQL INCLUDE sqlca;    //说明SQL通讯区

EXEC SQL INCLUDE oraca;    //说明ORACLE通讯区

EXEC SQL INCLUDE sqlda;    //说明SQL语句描述结构/*SQLDA结构体请查相关资料*/

EXEC ORACLE OPTION (ORACA = YES);

EXEC ORACLE OPTION (RELEASE_CURSOR = YES);

/说明ORACLE外部函数

extern "C" _declspec(dllimport) void _stdcall sqlclu(SQLDA*);

extern "C" _declspec(dllimport) void _stdcall sqlnul(short*, short*, int*);

extern "C" _declspec(dllimport) void _stdcall sqlprc(int*, int*, int*);

extern "C" _declspec(dllimport) struct SQLDA * _stdcall sqlald(int, unsigned int, unsigned int);

SQLDA *SelectUnit;  //定义选择项描述

SQLDA *BindUnit;  //定义输入项空间

//定义变量,以存放连接数据库的参数

EXEC SQL BEGIN DECLARE SECTION;

    char User[20];//用户名

    char Pwd[20];//密码

    char DB[20];//数据库服务名

EXEC SQL END DECLARE SECTION;

bool bConnect = false;//是否连接标志

#pragma hdrstop

#pragma argsused

//C++ Builder DLL的主函数

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)

{

        return 1;

}

 

/*---------------------------------------------------------------------------

    连接数据库

---------------------------------------------------------------------------*/

int _stdcall ConnectDB(const char *Username, const char *Password,

                                   const char *Dbname)

{

  strcpy(User, Username);

  strcpy(Pwd, Password);

  strcpy(DB, Dbname);

  EXEC SQL CONNECT :User IDENTIFIED BY :Pwd USING :DB;

  if (sqlca.sqlcode < 0)

    return -1;

   bConnect = true;

  return 0;

}

上一页1234下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答