Windows下C語言鏈接Oracle數據庫

最近公司有個項目須要用到Oracle數據庫,我負責前期的調研。因爲項目要用到C和PHP兩種語言,因此先收集這兩種語言鏈接Oracle的方法。PHP使用的是Laravel框架,直接使用了Laravel-OCI8進行數據庫鏈接,毫無壓力的鏈接成功了。C使用的是Ocilib進行數據庫鏈接,在這裏踩了幾個坑,卡了幾天,今天有空整理下,防止下次繼續掉坑。html

提示:本文使用的是win7 64位去鏈接遠程的 Oracle 11g數據庫git

OCILIB介紹

OCILIB是一個跨平臺的Oracle驅動程序,可提供很是快速和可靠地訪問Oracle數據庫。它提供了一個豐富,功能齊全,並易於使用的API 。OCILIB 支持運行的全部Oracle平臺。github

OCI環境搭建

因爲OCILIB是對OCI進行二次封裝,因此在使用OCILIB前,須要安裝OCI環境,咱們只要安裝好Instant Client就能完成OCI環境的搭建。web

Instant Client下載

首先咱們從官方下載本身系統所對應的Instant Client,因爲個人系統是win7 64位的,因此選擇了 Instant Client for Microsoft Windows (x64)下的 instantclient-basic-windows.x64-12.1.0.2.0.zipsql

提示:頁面下須要點擊 Accept License Agreement 後才能開始下載。數據庫

Instant Client安裝

咱們將下載的文件解壓到電腦任意位置(本文將以解壓到 D:\instantclient_12_1 爲例),而後添加如下環境變量:windows

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

提示:path若是已經存在值的話,直接在尾部追加。oracle

下載OCILIB

直接從Github上下載最新版便可,下載完成後將文件解壓到任意位置(本文將以解壓到 **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")
#endif

void 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 複製到程序目錄就能夠解決了。fetch

相關文章
相關標籤/搜索