VC下使用Proc连接Oracle数据库

1、设置目录:
    打开“tools->Options”,转到“Directories”页,在"Show Directories for"中
       1) 选“Executable Files”,在列表中加入proc.exe的目录(ORACLE_HOME\bin),如:D:\Oracle\product\10.1.0\Client_1\BIN

       2) 选“Include Files”,在列表中加入proc包含头文件的目录(ORACLE_HOME\PRECOMP\PUBLIC),如:D:\Oracle\product\10.1.0\Client_1\precomp\public

       3) 选“Library Files”,在列表中加入proc Lib所在的目录(ORACLE_HOME\PRECOMP\LIB\MSVC),如:D:\Oracle\product\10.1.0\Client_1\precomp\LIB\msvc

2、建立一MFC工程

3、往工程中加入,Proc的源和头文件,例加:proc.pc、proc.h

4、右击 .pc 文件(如proc.pc),选择"settings...",进入到"project settings",然后选择Custom Build页:
    a) 在Commands下写入命令:proc  输入入文件名 oname=输出文件名(如:proc proc.pc oname=proc.cpp) ;

    b) 在Outputs下写入输出文件名(如proc.c)。

5、编译工程,它将会自动预编译产生c/c++文件(如proc.cpp)

6、修改上一步产生的文件
    a) 把#include "stdafx.h"提到最前面(根据情况决定是否需要添加#include "stdafx.h");
    b) 把extern void sqlcxt (void **, unsigned long *,struct sqlexd *, const struct sqlcxp *);之类的函数的定义用下面的括起


         #ifdef  __cplusplus
         extern "C" {
         #endif

           extern void sqlcxt (void **, unsigned long *,struct sqlexd *, const struct sqlcxp *);

           ... ...


         #ifdef  __cplusplus
         }
         #endif

6、把lib文件加入工程中:

    project->settings->link-> object/library modules 中加入orasql10.lib(10g版本)


7、编译链接产生可执行文件

注:重编译整个工程时,别忘了第6步修改产生的文件。

附例程:

//------------------------------------------- pctest.pc ------------------------------------------------

#include <stdio.h>
#include <string.h>

EXEC SQL INCLUDE SQLCA;

int main()

{

EXEC SQL BEGIN DECLARE SECTION;

char user[20],pass[20],tnsname[20];

char enam[20];

int empn;

float sa;

EXEC SQL END DECLARE SECTION;

strcpy(user,"scott");

strcpy(pass,"tiger");

strcpy(tnsname,"oracle");

EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;

printf("connecting succesfull...\n");


EXEC SQL DECLARE emp_cur CURSOR FOR

SELECT empno,ename,sal FROM emp;

EXEC SQL OPEN emp_cur;

printf("cursor openning...\n");

while(1)
{
 EXEC SQL WHENEVER NOT FOUND DO break;
 EXEC SQL FETCH emp_cur INTO :empn,enam,sa;
 printf("%d,%s,%f\n",empn,enam,sa);
}


EXEC SQL CLOSE emp_cur;

EXEC SQL COMMIT WORK RELEASE;

return 0;

}

//---------------------------------- 编译 pctest.pc 后生成的pctest.c ---------------------------------------

略。

//-------------------------------------- 完 ------------------------------------------------

原文地址:https://www.cnblogs.com/meronzhang/p/2881820.html