博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows下C语言连接Oracle数据库
阅读量:6717 次
发布时间:2019-06-25

本文共 2415 字,大约阅读时间需要 8 分钟。

  hot3.png

最近公司有个项目需要用到Oracle数据库,我负责前期的调研。由于项目要用到C和PHP两种语言,所以先收集这两种语言连接Oracle的方法。PHP使用的是Laravel框架,直接使用了Laravel-OCI8进行数据库连接,毫无压力的连接成功了。C使用的是Ocilib进行数据库连接,在这里踩了几个坑,卡了几天,今天有空整理下,防止下次继续掉坑。

提示:本文使用的是win7 64位去连接远程的 Oracle 11g数据库

OCILIB介绍

是一个跨平台的Oracle驱动程序,可提供非常快速和可靠地访问Oracle数据库。它提供了一个丰富,功能齐全,并易于使用的API 。OCILIB 支持运行的所有Oracle平台。

OCI环境搭建

由于OCILIB是对OCI进行二次封装,所以在使用OCILIB前,需要安装OCI环境,我们只要安装好Instant Client就能完成OCI环境的搭建。

Instant Client下载

首先我们从官方下载自己系统所对应的,由于我的系统是win7 64位的,所以选择了 Instant Client for Microsoft Windows (x64)下的 instantclient-basic-windows.x64-12.1.0.2.0.zip

提示:页面下需要点击 Accept License Agreement 后才能开始下载。

Instant Client安装

我们将下载的文件解压到电脑任意位置(本文将以解压到 D:\instantclient_12_1 为例),然后添加以下环境变量:

  • path => D:\instantclient_12_1
  • TNS_ADMIN => D:\instantclient_12_1
  • NLS_LANG => SIMPLIFIED CHINESE_CHINA.ZHS16GBK

提示:path如果已经存在值的话,直接在尾部追加。

下载OCILIB

直接从上下载最新版即可,下载完成后将文件解压到任意位置(本文将以解压到 **C:\ocilib **为例)。

VS2010配置

  1. 点击 项目 - 属性 - 配置管理器,新建一个X64平台(因为我下载的Instant Client是64位的,所以要用x64平台)
  2. 点击 项目 - 属性 - 配置属性 - VC++ 目录,在 包含目录 添加 C:\ocilib\include
  3. 点击 项目 - 属性 - 配置属性 - 链接器 - 常规,在 附加库目录 添加 C:\ocilib\lib64

示例代码

#include "stdafx.h"#include "ocilib.h"#if defined(OCI_CHARSET_WIDE)#pragma comment(lib, "ocilibw.lib")#elif defined(OCI_CHARSET_ANSI)#pragma comment(lib, "ociliba.lib")#endifvoid err_handler(OCI_Error *err){   printf(                "code  : ORA-%05i\n"                "msg   : %s\n"                "sql   : %s\n",                OCI_ErrorGetOCICode(err),                 OCI_ErrorGetString(err),                OCI_GetSql(OCI_ErrorGetStatement(err))           );}int main(int argc, _TCHAR* argv[]){		OCI_Connection* cn;    OCI_Statement* st;    OCI_Resultset* rs;    	OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT);	cn  = OCI_ConnectionCreate("192.168.1.152:1521/TEST", "system", "123456", OCI_SESSION_DEFAULT);		if(cn == NULL){		err_handler(OCI_GetLastError());		printf("%i",OCI_GetVersionServer(cn));		printf("连接失败!\n");	}	st  = OCI_StatementCreate(cn);    OCI_ExecuteStmt(st, "select id,age from web_user");    rs = OCI_GetResultset(st);   	while (OCI_FetchNext(rs)){		printf("code: %i, name %s\n", OCI_GetInt(rs, 1)  , OCI_GetString(rs, 2));	}        printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));    OCI_Cleanup();		char a[20];	gets(a);    return EXIT_SUCCESS;}

提示:程序运行时如果提示 计算机中丢失 ocilib*.dll,这里由于程序找不到ocilib*.dll造成的,只要将 C:\ocilib\lib64 加入path或者将 C:\ocilib\lib64 下的 ocilib*.dll 复制到程序目录就可以解决了。

转载于:https://my.oschina.net/jathon/blog/756205

你可能感兴趣的文章
MySQL 安装详解
查看>>
使用Express + Socket.io + MongoDB实现简单的聊天室
查看>>
【cocos2d-x】横向滚屏射击游戏②----虚拟控制手柄
查看>>
Docker 之 容器网络管理
查看>>
基于时间点的恢复
查看>>
中国五大顶级域名8月第三周新增2.2万 美国净减5.4万个
查看>>
2月第四周中国五大顶级域名增8万 美国减3.2万
查看>>
【Android】触屏事件传递简述
查看>>
域名商年度报告:2014年DNSPod域名总量达174万
查看>>
8月第4周全球域名商(国际域名)新增注册量TOP15
查看>>
28家中国域名商保有量统计:中国数据跌至第11名
查看>>
openstack虚拟机创建流程
查看>>
我的友情链接
查看>>
Unix原理与应用学习笔记----第三章 通用命令介绍2
查看>>
管理cisco 互联网络
查看>>
一场稳定、高清、流畅的大型活动直播是怎么炼成的?
查看>>
面试题:旋转数组的最小数字
查看>>
明明白白你的Linux服务器——硬件篇
查看>>
makefile入门
查看>>
Install MySQL in Ubuntu 16.04 LTS
查看>>