proc start

proc + vs2005 start
1,安装oracle proc 组件
安装好后的目录主要如下:
E:\oracle\ora92\precomp         --主目录
E:\oracle\ora92\precomp\admin      --控制文件目录
E:\oracle\ora92\precomp\demo      --demo目录
E:\oracle\ora92\precomp\doc       --doc目录
E:\oracle\ora92\precomp\lib       --库文件目录
E:\oracle\ora92\precomp\public     --公共调用目录

程序项:
oracle--&gt application development --&gt proc c c++

2,使用proc 编译pc文件
新建一个pc文件:

#include     
#include     
#include     
/*包含sqlca头文件*/  
#include  
char   username[10],password[10],server[10];  
 
void   main()  
{  
/*  
*定义输入宿主变量:接收用户名,口令和网络服务名  
*/  
/*char   username[10],password[10],server[10];*/
/*也可以输入相关的数据库连接信息:*/  
/*printf("输入用户名:   ");  
gets(username);  
printf("输入口令:   ");  
gets(password);  
printf("输入网络服务名:   ");  
gets(server);*/
  
/*连接到数据库*/  
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR oraCN[30];
EXEC SQL END DECLARE SECTION;

strcpy(oraCN.arr,"test/test@yellow");//
oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len]='\0';

EXEC SQL CONNECT :oraCN;
printf("\n [CONNECTED!]");

if   (sqlca.sqlcode   ==   0)   printf("连接成功!\n");  
else   /*显示连接错误*/  
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc); 
printf("按q结束");  
while(getchar() == 'q')
return 0; 
}  


新建一个pre项目
设置proc的首选项为:生成c文件
添加pc文件到项目
然后预编译
如果成功会有绿色的勾出现,如果报错双击查看报错信息
可能会出现使用当前的控制文件后出现错误的情况
在控制文件目录下找到:
pcscfg.cfg
加入以下代码:
define=(WIN32_LEAN_AND_MEAN)
char_map=string
DYNAMIC=ANSI
mode=ANSI
parse=full
SQLCHECK=SEMANTICS
RELEASE_CURSOR=NO
HOLD_CURSOR=YES
VARCHAR=YES
include=E:\Program Files\Microsoft Visual Studio 8\VC\include

其中:
include=E:\Program Files\Microsoft Visual Studio 8\VC\include
是设置vs2005的vc运行库目录

成功的生成的c文件如下:

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn;
  unsigned short tvnvsnl;
  unsigned char *tvnnm;
  unsigned short tvnnml;
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn;
  unsigned short adtmode;
  unsigned short adtnum; 
  sqltvn adttvn[1];      
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn;
  unsigned short tdsnum;
  unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[50];
};
static const struct sqlcxp sqlfpn =
{
    49,
    "e:\\oracle\\ora92\\precomp\\test\\proc\\conn\\connect.pc"
};


static unsigned int sqlctx = 1870954357;


static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
              int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[4];
   unsigned int   sqhstl[4];
            int   sqhsts[4];
            void  *sqindv[4];
            int   sqinds[4];
   unsigned int   sqharm[4];
   unsigned int   *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {12,4};

/* SQLLIB Prototypes */
extern void sqlcxt (void **, unsigned int *,
                    struct sqlexd *, const struct sqlcxp *);
extern void sqlcx2t(void **, unsigned int *,
                    struct sqlexd *, const struct sqlcxp *);
extern void sqlbuft(void **, char *);
extern void sqlgs2t(void **, char *);
extern void sqlorat(void **, unsigned int *, void *);

/* Forms Interface */
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern void sqliem(char *, int *);

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4128,852,27,0,
5,0,0,1,0,0,283,31,0,0,4,4,0,1,0,1,9,0,0,1,10,0,0,1,10,0,0,1,10,0,0,
};


#include     
#include     
#include     
/*包含sqlca头文件*/  
#include  
char   username[10],password[10],server[10];  
 
void   main()  
{  
/*  
*定义输入宿主变量:接收用户名,口令和网络服务名  
*/  
/*char   username[10],password[10],server[10];*/
/*也可以输入相关的数据库连接信息:*/  
/*printf("输入用户名:   ");  
gets(username);  
printf("输入口令:   ");  
gets(password);  
printf("输入网络服务名:   ");  
gets(server);*/
  
/*连接到数据库*/  
/* EXEC SQL BEGIN DECLARE SECTION; */

/* VARCHAR oraCN[30]; */
struct { unsigned short len; unsigned char arr[30]; } oraCN;

/* EXEC SQL END DECLARE SECTION; */


strcpy(oraCN.arr,"test/test@yellow");//
oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len]='\0';

/* EXEC SQL CONNECT :oraCN; */

{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 12;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int  )10;
sqlstm.offset = (unsigned int  )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char  *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int  )0;
sqlstm.sqhstv[0] = (         void  *)&oraCN;
sqlstm.sqhstl[0] = (unsigned int  )32;
sqlstm.sqhsts[0] = (         int  )32;
sqlstm.sqindv[0] = (         void  *)0;
sqlstm.sqinds[0] = (         int  )0;
sqlstm.sqharm[0] = (unsigned int  )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlstm.sqlcmax = (unsigned int )100;
sqlstm.sqlcmin = (unsigned int )2;
sqlstm.sqlcincr = (unsigned int )1;
sqlstm.sqlctimeout = (unsigned int )0;
sqlstm.sqlcnowait = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}


printf("\n [CONNECTED!]");

if   (sqlca.sqlcode   ==   0)   printf("连接成功!\n");  
else   /*显示连接错误*/  
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc); 
printf("按q结束");  
while(getchar() = 'q')
return 0; 
}  
 
 

然后用vs2005新建一个32位的控制台项目
将c代码复制到项目下,添加到工程
直接编译,应该会报错:
找不到sqlca.h
等错误

解决步骤:
1,将c文件重命名为.cpp文件,编译后依然报错,
  如果提示找不到文件头,找到c文件中的 #include 修改为 #include "sqlca.h"
2,项目属性 --&gt 配置属性 --&gtc/c++ --&gt 预编译头 --&gt 创建/使用预编译头 --&gt选择不使用预编译头
3,项目属性 --&gt 配置属性 --&gt链接器 --&gt 附加目录库 --&gt
  添加oracle proc的lib目录,如:
  E:\oracle\ora92\precomp\lib;E:\oracle\ora92\precomp\lib\msvc;E:\oracle\ora92\precomp\public
4,选择要编译的cpp文件,右键属性 --&gt 配置属性 --&gt c/c++ --&gt高级 --&gt编译为:编译为c代码(/TC)
5,编译文件,查看信息,如果报错,则查看代码,上述代码中可能会报错:
  大致是说找不到struct的定义,将struct { unsigned short len; unsigned char arr[30]; } oraCN;
  放在合适的地方就可以了。


ok,完成。

 

-----------------------

在windowsxp,oracle 9i,vs2005下完成。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16179598/viewspace-611219/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16179598/viewspace-611219/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值