OCI连接ORACLE 
需要下载ORACLE 客户端  instanclient_11_2 或者其他版本 ,环境变量加入路径
动态链接oci.dll

代码
<pre name="code" class="cpp">#include "StdAfx.h"
#include "OracleOci.h"typedef sword (*OCI_FUN_CREATE)(OCIEnv**,ub4,void*,void*,void*,void*,size_t,void**);
typedef sword (*OCI_FUN_HANDLEALLOC)(void*,void**,ub4,size_t,void**);
typedef sword (*OCI_FUN_SERVERATTACH) (OCIServer*,OCIError*,OraText*,sb4,ub4);
typedef sword (*OCI_FUN_FREE) (void*,ub4);
typedef sword (*OCI_FUN_ERRORGET)(void*,ub4,OraText*,sb4*,OraText*,ub4,ub4);
typedef sword (*OCI_FUN_ATTRSET)(void*,ub4,void*,ub4,ub4,OCIError*);
typedef sword (*OCI_FUN_ATTRGET)(void*,ub4,void*,ub4*,ub4,OCIError*);
typedef sword (*OCI_FUN_SESSIONBEGIN)(OCISvcCtx*,OCIError*,OCISession*,ub4,ub4);
typedef sword (*OCI_FUN_STMTPREPARE)(OCIStmt*,OCIError*,const OraText*,ub4,ub4,ub4);
typedef sword (*OCI_FUN_DEFINEBYPOS)(OCIStmt*,OCIDefine**,OCIError*,ub4,void*,sb4,ub2,void*,ub2*,ub2*,ub4);
typedef sword (*OCI_FUN_STMTEXECUTE)(OCISvcCtx*, OCIStmt*,OCIError*,ub4,ub4,const OCISnapshot*,OCISnapshot*,ub4);
typedef sword (*OCI_FUN_STMTFETCH2)(OCIStmt*,OCIError*,ub4,ub2,sb4,ub4);
typedef sword (*OCI_FUN_TRANSCOMMIT)(OCISvcCtx*,OCIError*,ub4);
typedef sword (*OCI_FUN_SERVERDETACH)(OCIServer*,OCIError*,ub4);
typedef sword (*OCI_FUN_LOGOFF)(OCISvcCtx*, OCIError*);OCI_FUN_CREATE pOci_Create = 0;
OCI_FUN_HANDLEALLOC pOci_HandleAlloc = 0;
OCI_FUN_SERVERATTACH pOci_ServerAttach = 0;
OCI_FUN_FREE pOci_Free = 0;
OCI_FUN_ERRORGET pOci_ErrorGet = 0;
OCI_FUN_ATTRSET pOci_AttrSet = 0;
OCI_FUN_ATTRGET pOci_AttrGet = 0;
OCI_FUN_SESSIONBEGIN pOci_SessionBegin = 0;
OCI_FUN_STMTPREPARE pOci_StmtPrepare = 0;
OCI_FUN_DEFINEBYPOS pOci_DefineByPos = 0;
OCI_FUN_STMTEXECUTE pOci_StmtExecute = 0;
OCI_FUN_STMTFETCH2 pOci_StmtFetch2 = 0;
OCI_FUN_TRANSCOMMIT pOci_TransCommit = 0;
OCI_FUN_SERVERDETACH pOci_ServerDetach = 0;
OCI_FUN_LOGOFF pOci_Logoff = 0;OracleOci::OracleOci(void)
{env = NULL;serv = NULL;err = NULL;usr = NULL;svc = NULL;stm = NULL;hdll = NULL;
}OracleOci::~OracleOci(void)
{
}int OracleOci::InitaliOle()
{hdll = LoadLibrary(_T("oci.dll"));pOci_Create = (OCI_FUN_CREATE)GetProcAddress(hdll, "OCIEnvCreate");pOci_HandleAlloc = (OCI_FUN_HANDLEALLOC)GetProcAddress(hdll,"OCIHandleAlloc");pOci_ServerAttach =(OCI_FUN_SERVERATTACH)GetProcAddress(hdll,"OCIServerAttach");pOci_ErrorGet = (OCI_FUN_ERRORGET)GetProcAddress(hdll,"OCIErrorGet");pOci_Free = (OCI_FUN_FREE)GetProcAddress(hdll,"OCIHandleFree");pOci_AttrSet = (OCI_FUN_ATTRSET)GetProcAddress(hdll,"OCIAttrSet");pOci_SessionBegin = (OCI_FUN_SESSIONBEGIN)GetProcAddress(hdll,"OCISessionBegin");pOci_StmtPrepare = (OCI_FUN_STMTPREPARE)GetProcAddress(hdll,"OCIStmtPrepare");pOci_DefineByPos = (OCI_FUN_DEFINEBYPOS)GetProcAddress(hdll,"OCIDefineByPos"); pOci_AttrGet = (OCI_FUN_ATTRGET)GetProcAddress(hdll,"OCIAttrGet");pOci_StmtExecute = (OCI_FUN_STMTEXECUTE)GetProcAddress(hdll,"OCIStmtExecute");pOci_StmtFetch2 = (OCI_FUN_STMTFETCH2)GetProcAddress(hdll,"OCIStmtFetch2");pOci_TransCommit = (OCI_FUN_TRANSCOMMIT)GetProcAddress(hdll,"OCITransCommit");pOci_ServerDetach = (OCI_FUN_SERVERDETACH)GetProcAddress(hdll,"OCIServerDetach");pOci_Logoff = (OCI_FUN_LOGOFF)GetProcAddress(hdll,"OCILogoff");if (hdll == NULL || pOci_AttrGet == 0 || pOci_AttrSet == 0 || pOci_Create == 0 || pOci_DefineByPos == 0 || pOci_ErrorGet == 0 ||pOci_Free == 0 || pOci_HandleAlloc == 0 || pOci_ServerAttach == 0 || pOci_SessionBegin == 0 || pOci_StmtExecute == 0 ||pOci_StmtFetch2 == 0 || pOci_StmtPrepare == 0 || pOci_TransCommit == 0 || pOci_ServerDetach == 0 || pOci_Logoff == 0){return -1;}return 0;
}bool OracleOci::InitialiServ(string db)
{sword swResult;swResult = (pOci_Create)(&env,OCI_DEFAULT,NULL,NULL,NULL,NULL,0,NULL);if (swResult != OCI_SUCCESS  && swResult != OCI_SUCCESS_WITH_INFO){AfxMessageBox("Oracle init server error\n");return false;}(pOci_HandleAlloc)((dvoid*)env,(dvoid**)&err,OCI_HTYPE_ERROR,(size_t)0,(dvoid**)0);(pOci_HandleAlloc)((dvoid *)env,(dvoid **)&serv,OCI_HTYPE_SERVER,(size_t)0,(dvoid **)0);swResult = (pOci_ServerAttach)(serv,err,(text *)db.c_str(),strlen(db.c_str()),0);if (swResult != OCI_SUCCESS){int errcno;char errbuf[512]= "";sb4 errcode;(pOci_ErrorGet)((dvoid *)err,(ub4)1,(text *)NULL,&errcode,(ub1*)errbuf,(ub4)sizeof(errbuf),OCI_HTYPE_ERROR);errcno = errcode;AfxMessageBox("Oracle server attach error :%d\n",errcno);ReleaseServ();return false;}//AfxMessageBox("Oracle server attach success");return true;
}bool OracleOci::ConnOracle(string user,string pwd)
{err = NULL;(pOci_HandleAlloc)((dvoid*)env,(dvoid **)&err,OCI_HTYPE_ERROR,(size_t)0,(dvoid**)0);(void)pOci_HandleAlloc((dvoid*)env,(dvoid **)&svc,OCI_HTYPE_SVCCTX,(size_t)0,(dvoid**)0);(void)pOci_AttrSet((dvoid*)svc,OCI_HTYPE_SVCCTX,(dvoid*)serv,(ub4)0,OCI_ATTR_SERVER,(OCIError*)err);(void)pOci_HandleAlloc((dvoid*)env,(dvoid **)&usr,OCI_HTYPE_SESSION,(size_t)0,(dvoid**)0);(void)pOci_AttrSet((dvoid*)usr,(ub4)OCI_HTYPE_SESSION,(dvoid*)user.c_str(),(ub4)strlen(user.c_str()),(ub4)OCI_ATTR_USERNAME,err);(void)pOci_AttrSet((dvoid*)usr,(ub4)OCI_HTYPE_SESSION,(dvoid*)pwd.c_str(),(ub4)strlen(pwd.c_str()),(ub4)OCI_ATTR_PASSWORD,err);if (pOci_SessionBegin(svc,err,usr,OCI_CRED_RDBMS,(ub4)OCI_DEFAULT) != OCI_SUCCESS){int errcno;char errbuf[512]= "";sb4 errcode;//获取错误指针和OCI错误代码pOci_ErrorGet((dvoid *)err,(ub4)1,(text *)NULL,&errcode,(ub1*)errbuf,(ub4)sizeof(errbuf),OCI_HTYPE_ERROR);errcno = errcode;AfxMessageBox("User session error : %d\n",errcno);ReleaseServ();return false;}TRACE("user session success");(void)pOci_AttrSet((dvoid*)svc,(ub4)OCI_HTYPE_SVCCTX,(dvoid*)usr,(ub4)0,(ub4)OCI_ATTR_SESSION,err);return true;
}int OracleOci::SelectItem(string sqlcmd,CString & num)
{//查询err = NULL;if (pOci_HandleAlloc((dvoid*)env,(dvoid**)&stm,(ub4)OCI_HTYPE_STMT,size_t(0),(dvoid**)0) != OCI_SUCCESS){TRACE("Create Stmt err\n");return false;}pOci_HandleAlloc((dvoid*)env,(dvoid **)&err,OCI_HTYPE_ERROR,size_t(0),(dvoid **)0);//char sql[MAX_PATH] = "select * from VIDEO_ROLE";if (pOci_StmtPrepare(stm,err,(text *)sqlcmd.c_str(),(ub4)strlen(sqlcmd.c_str()),(ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT) != OCI_SUCCESS){TRACE("creat prepare error\n");return false;}TRACE("creat prepare success\n");OCIDefine * tp1 = NULL;OCIDefine * tp2 = NULL;//struct result rst;char t_res[100] = "";ub2 datalen = 0;char isnull[6] = "";pOci_DefineByPos(stm,&tp1,err,1,(dvoid * )&t_res,sizeof(t_res),SQLT_CHR,NULL,&datalen,NULL,OCI_DEFAULT);//pOci_DefineByPos(stm,&tp2,err,2,(dvoid *)&rst.cname,sizeof(rst.cname),SQLT_STR,NULL,&datalen,NULL,OCI_DEFAULT);ub2 stm_type;pOci_AttrGet((dvoid *)stm,(ub4)OCI_HTYPE_STMT,(dvoid *)&stm_type,(ub4*)0,(ub4)OCI_ATTR_STMT_TYPE,err);pOci_StmtExecute(svc,stm,err,(ub4)0,(ub4)0,(OCISnapshot*)NULL,(OCISnapshot*)NULL,OCI_DEFAULT);int row_fetched = 0;do {//输出结果} while (pOci_StmtFetch2(stm,err,(ub4)1,OCI_FETCH_NEXT,1,OCI_DEFAULT) != OCI_NO_DATA);num = t_res;//获得条数pOci_AttrGet(stm,OCI_HTYPE_STMT,(dvoid *)&row_fetched,(ub4*)sizeof(row_fetched),OCI_ATTR_ROW_COUNT,err);//输出条目数return row_fetched;
}bool OracleOci::InsertItem(char* sqlcmd)
{if (pOci_HandleAlloc((dvoid*)env,(dvoid**)&stm,(ub4)OCI_HTYPE_STMT,size_t(0),(dvoid**)0) != OCI_SUCCESS){TRACE("Create Stmt err\n");return false;}pOci_HandleAlloc((dvoid*)env,(dvoid **)&err,OCI_HTYPE_ERROR,size_t(0),(dvoid **)0);sb4  t_result =  0;//char sql_insert_file[500] = "insert into video_file (id,video_data_id,real_name,physical_location,suffix,yuan_location,status,bytes,create_dept,create_person,create_person_id,create_dept_id,total_bytes,finished_bytes,is_finished) \values('40000','40000','zzh201511251150.MP4','d:\\VideoUpload\\zzzzzz\\VIDEO\\zzh201511251150.MP4','.MP4','d:\\VideoUpload\\zzzzzz\\VIDEO\\zzh201511251150.MP4','1','412065040','大冶法院','管理员','U0001','M001','0','0','0')";if (pOci_StmtPrepare(stm,err,(text *)sqlcmd,(ub4)strlen(sqlcmd),(ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT) != OCI_SUCCESS){TRACE("creat prepare error\n");return false;}t_result = pOci_StmtExecute(svc,stm,err,(ub4)1,(ub4)0,(OCISnapshot*)NULL,(OCISnapshot*)NULL,OCI_DEFAULT | OCI_COMMIT_ON_SUCCESS);if (t_result != OCI_SUCCESS){int errcno;char errbuf[512]= "";sb4 errcode;//获取错误指针和OCI错误代码pOci_ErrorGet((dvoid *)err,(ub4)1,(text *)NULL,&errcode,(ub1*)errbuf,(ub4)sizeof(errbuf),OCI_HTYPE_ERROR);errcno = errcode;TRACE("User session error\n");ReleaseServ();return false;}return true;
}void OracleOci::ReleaseServ()
{pOci_Logoff(svc,err);pOci_ServerDetach(serv,err,OCI_DEFAULT);pOci_Free((dvoid *)env,OCI_HTYPE_ENV);pOci_Free((dvoid *)serv,OCI_HTYPE_SERVER);pOci_Free((dvoid *)err,OCI_HTYPE_ERROR);if(hdll != NULL){FreeLibrary(hdll); }
}

OCI动态链接ORACLE相关推荐

  1. c++定义一个动态全局变量_静态链接与动态链接的宏观概述及微观详解

    静态链接与动态链接的宏观概述及微观详解 第一部分 宏观概述 1. 静态链接 静态链接就是在程序运行前,链接器通过对象文件中包含的重定位表,完成所有重定位操作,并最终形成一个在运行时不需要再次进行依赖库 ...

  2. mybatis连接oracle12乱码,使用mybatis链接oracle数据库出现账号密码错误解决

    使用mybatis链接oracle数据库步骤 最近oracle老师布置下来了作业,要求使用传统的java代码链接oracle数据库做一个小程序,因为我已经很熟练的掌握了ssm框架的开发,以前用的是my ...

  3. ae显示不能稳定链接服务器,ae正在连接到动态链接服务器

    ae正在连接到动态链接服务器 内容精选 换一换 存储单元是在后端存储空间上划分的存储用户备份数据的基础存储单元.后端存储空间映射成功后,必须创建存储单元后才能使用.本节介绍如何将混合云备份存储库接入到 ...

  4. OpenSBI ELF rela.dyn和.dynsym动态链接过程

    在OpenSBI中重定位分成了两种,根据是否配置了FW_PIC宏来区分, 配置了FW_PIC,即本文描述的rela.dyn和.dynsym的动态链接. 未配置FW_PIC是加载地址和链接地址不相等情况 ...

  5. mysql连接oracle数据库服务器_Oracle 远程链接oracle数据库服务器的配置

    远程链接oracle数据库服务器的配置 by:授客 QQ:1033553122 原理: 一.Oracle客户端与服务器端的通讯机制 1.OracleNet协议 如下图所示,Oracle通过Oracle ...

  6. 汇编语言使用C库函数和Linux动态链接

    使用printf 代码 #cpuid2.s -- Using C labrary calls .section .data output: .asciz "The processor Ven ...

  7. 程序员的自我修养--链接、装载与库笔记:Windows下的动态链接

    Windows下的PE的动态链接与Linux下的ELF动态链接相比,有很多类似的地方,但也有很多不同的地方. 1. DLL简介 DLL即动态链接库(Dynamic-Link Library)的缩写,它 ...

  8. JVM---虚拟机栈(动态链接与方法返回地址)

    虚拟机栈-动态链接 动态链接.方法返回地址.附加信息 :有些地方被称为帧数据区: 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用,这个引用的目的就是为了支持当前方法的代码能够实现动态链 ...

  9. 嵌入式学习笔记之二(静态链接与动态链接)

    要了解静态链接与动态链接,首先要了解什么是静态链接和动态链接,这一部分这里不做讲解,可以去度娘查找. 1.静态链接 静态链接通过静态库进行链接,生成的目标程序中包含运行需要的所有库,可以直接运行,不过 ...

最新文章

  1. basler相机参数简要中文说明_附下载| OpenCV最新中文版官方教程
  2. Cisco 路由器防火墙配置命令及实例
  3. 微信公众号开发 常用脚本累计
  4. laravel使用redis做缓存的方法
  5. 【机器学习】太棒了!8 个开源自动化机器学习框架,轻松搞定机器学习!
  6. 将Vue+Nodejs项目部署到阿里云服务器
  7. 04751计算机网络安全讲解,【19份】04751计算机网络安全自考试卷_历年真题自考答案及解析_湖南080901计算机科学与技术(原B080702计算机及应用)专业-自考生资料网...
  8. java中的foreach用法及总结
  9. XHTML 教程 续一
  10. 0宽字符加密_艺术鬼才!Unicode 字符还能这么玩?
  11. 计算机视觉(7)————特征检测(边缘/角/斑点)小专题(2)Roberts 算子
  12. python+django+mysql多用户B2C商城系统毕业设计毕设开题报告
  13. JS 截取视频某一帧图片 实现视频截图
  14. Idea 常用设置和快捷键
  15. 你不屑于大器晚成,就只能平庸一生
  16. rand和srand函数的用法
  17. JAVA分解与合并文件函数_Windows WIM文件的分割,合并,瘦身操作
  18. 恕我直言,在座的各位根本写不好Java!
  19. java web 开发资料链接
  20. uniapp打开摄像头进行视频并拍照

热门文章

  1. Nginx/Apache恶意User-Agent过滤列表 屏蔽蜘蛛爬虫
  2. Springboot的@Aspect使用
  3. 如何搭建网站?第二步:购买服务器域名
  4. Days14 ContentProvider ContentResolver
  5. 镜像神经元现象是什么,镜像神经元的作用
  6. Sortablejs + css 模仿安卓桌面,实现可拖拽排序的主页图标+文件夹收纳
  7. 田忌赛马(贪心算法)C++
  8. 停不下的脚步:IT高管人士的工作实录
  9. 我的世界电脑版服务器区块怎么显示,我的世界区块显示指令 | 手游网游页游攻略大全...
  10. 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物