基于ADO的远程Oracle连接
最近在一个通过MFC做一个界面,通过这个界面可以对布置在另一台服务器上的数据库MySQL、SQl Server、Oracle进行增删创建表的操作。其中我通过ADO很快就完成了对MySQL和SQL Server的控制。但是Oracle的连接就麻烦很多,我完成这个项目的大部分的时间都在研究怎么与Oracle数据库互通。
先声明下我的电脑环境,没有装ORACLE客户端,WIN7_64位操作系统,使用的编译器是VC6。服务器用的是WIN10的系统,Oracle的版本为11.2.0.1.0,我客户端安装了
先交代下,我用OTL最终没能成功连接上数据库,最终是用ADO连接上的,以下是我整个踩坑过程中难点的记录。
现有的一些工具有很多,最终考虑先用OTL尝试。
网上很多人说使用OTL只要有一个头文件就够了,而我尝试了只包含OTLV4.H后连编译都通不过,因为还要添加OCI的各种lib库和OCI.dll。
我是先去别的博客推荐的英文网站上下了一个头文件OTLV4.H,结果发现是个坑,里面的代码是错的,怎么都是编译不过的,后来尝试性的去国内的一个网站下载了一个OTLV4.h没想到竟然编译通过了。
然后我又下载了OCI的各种lib库和OCI.dll。
在新建工程中,要把OCI.dll放在编译出来的DEBUG或者RELEASE文件中,
然后在VC6的左上角菜单中project->project setting->LINK->input中的object/library modules中填入oci.lib,在additional library path中填入...\OCI\lib\MSVC(这个是OCI的lib文件库)。
在左上角菜单中tool->options->directories中写入include文件目录...\OCI\include。
然后在工程中包含otlv4.h的头文件,这样工程环境的搭建就完成了。
OTL的头文件中根据你的宏定义选择相应功能。
我根据我的环境选择了在StdAfx.h中加入以下宏定义内容:
#define OTL_ORA11G_R2 // Compile OTL 4.0/OCI11.2
#define OTL_ORA_UTF8
#define OTL_ORA_OCI_ENV_CREATE
宏定义介绍参考http://otl.sourceforge.net/otl3_compile.htm。
db.rlogon("userid/password@//IP:PORT/SID"); //这是我的链接字符串格式。
连接前记得先初始化。
大部分的环境都好了,可是就死连不上,最后放弃转用ADO。
MFC调用ADO的环境搭建如下:
#import "../../out/msado15.dll" no_namespace rename ("EOF","adoEOF")
在头文件中加入上面这句话
下载安装Oracle 11.2 client
有安装包的,安装好后环境变量什么的都会设置好。
在不清楚自己该用什么字符串格式的情况下,我先新建一个txt文件,将后缀改为udl,右键打开方式中选择OLE DB core service 如下图
为我想连接Oracle的数据库所以要在提供程序里选择XXXX OLE DB Provider for Oracle.
完连接信息后确认测试连接成功,然后点确定
再用文本文档打开该文件,得到连接字符串。
Provider=MSDAORA.1;User ID=system;Data Source=10.10.22.103:1521/iotdb;Persist Security Info=False
最终我连接Oracle的字符串如下:
strConnect.Format("Provider=MSDAORA.1;Data Source=%s:%s/%s;Persist Security Info=False",csServer,csPort,csDBName);
然后再 m_pConnection->Open((_bstr_t)strConnect,(_bstr_t)csUser,(_bstr_t)csDBPass,adModeUnknown);///连接数据库
连接之前记得先调用初始化函数。
基于ADO的远程Oracle连接的更多相关文章
- 详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题
本文提供详细的故障排除步骤,用于为基于 Windows 的 Azure 虚拟机诊断和修复复杂的远程桌面错误. Important 若要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章, ...
- 如何配置pl/sql (本地客户端)连接远程oracle服务器
配置方法: 1.找到oracle的安装目录.如:C:\oracle\product\10.2.0\db_1\network\ADMIN 2.找到tnsnames.ora文件. 3.用文本方式打开,添加 ...
- PLSQL Developer连接远程Oracle方法(非安装客户端)
Oracle比较麻烦,通常需要安装oracle的客户端才能实现.通过instantclient可以比较简单的连接远程的Oracle. 1.新建目录D:\Oracle_Cleint用于存放相关文件,新建 ...
- PL/SQL Developer连接远程Oracle数据库
转自:http://zhengdu.net/archives/152 一.首先看远程端oracle服务是否启动 如果没有启动,请启动oracle服务 ps:创建或者删除oracle监听 二.远程端or ...
- ODAC连接远程Oracle数据库时,数据源名称orcl改为gscloud
今天用ODAC连接远程Oracle数据库时,怎么也连接不上, 更改配置文件的tnsname.ora,使之都一样,并完全配置正确还是出现错误,连接不上. 最后请大神一世,原来是数据源名称的问题. 把数据 ...
- sql plus 和 pl/sql无法连接远程oracle数据库
前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...
- PLSQL Developer12连接远程Oracle xe 11g
目标: .学习使用docker下载oracle xe 11g .使用PLSQL连上启动运行oracle xe 11g容器服务 1.准备工作 Linux 安装docker 下载PLSQL Develop ...
- 如何配置pl/sql 连接远程oracle服务器
在下边的两种情况下,如何配置pl/sql 连接远程oracle服务器 1)在客户端不装oracle 客户端也不装服务器,能否配置pl/sql 连接远程oracle服务器,如何配置,请给出详细的文档说明 ...
- PLSQL Developer连接远程Oracle方法(非安装client)
远程连接Oracle比較麻烦,通常须要安装oracle的客户端才干实现. 通过instantclient能够比較简单的连接远程的Oracle. 1.新建文件夹D:\Oracle_Cleint用于存放相 ...
随机推荐
- nodejs查看本机hosts文件域名对应ip
const dns = require('dns') dns.lookup('domainName', function(err, result) { console.log(result) }) r ...
- Spring Boot 2.x实战之定时任务调度
在后端开发中,有些场景是需要使用定时任务的,例如:定时同步一批数据.定时清理一些数据,在Spring Boot中提供了@Scheduled注解就提供了定时调度的功能,对于简单的.单机的调度方案是足够了 ...
- mysql在group by分组后查询第二条/第三条乃至每组中任意一条数据
昨天老板让我查询项目中(众筹),没人刚发起感召后,前三笔钱的入账时间和金额,这把大哥整懵逼了,group by在某些方面是好使,但这次不能为我所用了,获取第一笔进账是简单,可以用group by 直接 ...
- js之大文件断点续传
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- UVA 11468 Substring (记忆化搜索 + AC自动鸡)
传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成. 且所有字符,要么是数字,要么是大小写字母. 问你生成一个长度为L的串,不包 ...
- 如何在Processing中调用Windows应用程序
Processing调用了exe就意味着失去了跨平台.调用的过程是,先得到当前的runtime,然后调用runtime的exec()方法,在exec()传入的是字符串参数,这个参数很重要,该有空格的地 ...
- 9.本地线程(ThreadLoca)
ThreadLoca 提高一个线程的局部变量,访问某个线程都有自己的局部变量,当使用ThreadLoca为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立的改变自己的副本,二不会影响到 ...
- Linux下的crontab定时执行任务命令
0x00 简介 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的 ...
- 【Python 代码】生成hdf5文件
import random from PIL import Image import numpy as np import os import h5py from PIL import Image L ...
- 【转】Android检查手机是否被root
目前来说Android平台并没有提供能够root检查的工具.但是我们可以通过两种方式来判断 手机里面是否有su文件 这个su文件是不是能够执行 但是这两种检查方式都存在缺点. 第一种存在误测和漏测的情 ...