一个使用Pro*C实现增删改查的小例子
来源:互联网 发布:js实现扑克牌自动洗牌 编辑:程序博客网 时间:2024/05/20 05:09
http://blog.csdn.net/t0nsha/article/details/5795800
环境:
WinXPSP3 + VC6 + ORACLE 11g
步骤:
1)新建demo.pc,内容如下:
- #include <stdio.h>
- // 全程说明段
- EXEC SQL BEGIN DECLARE SECTION;
- VARCHAR username[20];
- VARCHAR password[20];
- EXEC SQL END DECLARE SECTION;
- // 说明通讯区
- EXEC SQL INCLUDE sqlca;
- // 外部函数说明
- void insert(),update(),del(),query();
- main()
- {
- char operate[5];
- // 登录到oracle
- strcpy(username.arr,"SCOTT"); // 用户名
- username.len=strlen(username.arr);
- strcpy(password.arr,"x"); // 密码
- password.len=strlen(password.arr);
- EXEC SQL WHENEVER SQLERROR GOTO logon_error;
- EXEC SQL CONNECT :username IDENTIFIED BY :password;
- printf("/nConnect to ORACLE as user: %s",username.arr);
- for(;;)
- {
- printf("/n***********************");
- printf("/n* 1.Query *");
- printf("/n* 2.Update *");
- printf("/n* 3.Insert *");
- printf("/n* 4.Delete *");
- printf("/n* 5.Exit *");
- printf("/n***********************");
- printf("/n Enter selection:/n");
- gets(operate);
- switch(operate[0])
- {
- case '1':query();
- break;
- case '2':update();
- break;
- case '3':insert();
- break;
- case '4':del();
- break;
- case '5':break;
- default :printf("/n/n invalid selection/n");
- break;
- }
- if(operate[0]=='5')
- break;
- }
- // 结束处理
- EXEC SQL COMMIT RELEASE;
- printf("/n/n very good !/n/n");
- exit(0);
- // 登录出错处理
- logon_error:
- printf("/n invalid username/password/n");
- printf("/n%.70s/n",sqlca.sqlerrm.sqlerrmc);
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- EXEC SQL ROLLBACK RELEASE;
- exit(1);
- }
- // 更新处理
- void update()
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int emp_number;
- VARCHAR emp_name[20];
- VARCHAR job[50];
- short ind_job;
- EXEC SQL END DECLARE SECTION;
- char empnum[8];
- printf("/n/nEnter employee number(press RETURN to abort):");
- gets(empnum);
- if(!strcmp(empnum,""))
- {
- printf("/n");
- return;
- }
- emp_number = atoi(empnum);
- EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
- EXEC SQL WHENEVER NOT FOUND GOTO notfound;
- EXEC SQL SELECT ENAME,JOB
- INTO :emp_name,:job:ind_job
- FROM EMP
- WHERE EMPNO = :emp_number;
- emp_name.arr[emp_name.len]='/0';
- switch(ind_job)
- {
- case -1:strcpy(job.arr,"NULL");
- job.len=strlen(job.arr);
- break;
- case 0:job.arr[job.len]='/0';
- break;
- default:if(ind_job>0)
- printf("/n/nWARNING: Job truncated./n");
- break;
- }
- printf("/n/nNumber Employee Name Job/n");
- printf("----------------------------------/n");
- printf("%-9d%-15s%-8s/n",emp_number,emp_name.arr,job.arr);
- printf("/nEnter new employee name:");
- gets(emp_name.arr);
- emp_name.len=strlen(emp_name.arr);
- printf("/n/nEnter new job:");
- gets(job.arr);
- job.len=strlen(job.arr);
- ind_job=0;
- if(!strcmp(job.arr,""))
- ind_job=-1;
- EXEC SQL UPDATE EMP
- SET ENAME= :emp_name,JOB=:job:ind_job
- WHERE EMPNO= :emp_number;
- printf("/n/nEmployee %d updated./n",emp_number);
- EXEC SQL COMMIT;
- return;
- notfound:
- printf("/n/nWARNING: Employee %d does not exist./n",emp_number);
- return;
- sqlerror:
- printf("/n%.70s/n",sqlca.sqlerrm.sqlerrmc);
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- EXEC SQL ROLLBACK;
- exit(1);
- }
- // 插入处理
- void insert()
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int emp_number;
- VARCHAR emp_name[20];
- VARCHAR job[20];
- short ind_job;
- EXEC SQL END DECLARE SECTION;
- char empnum[8];
- printf("/n/nEnter employee number(press RETURN to abort):");
- gets(empnum);
- if(!strcmp(empnum,""))
- {
- printf("/n");
- return;
- }
- emp_number = atoi(empnum);
- EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
- EXEC SQL WHENEVER NOT FOUND GOTO resume;
- EXEC SQL SELECT ENAME INTO :emp_name
- FROM EMP
- WHERE EMPNO = :emp_number;
- printf("/n/nWARNING: Employee %d alread exist./n",emp_number);
- return;
- resume:
- printf("/n/nEnter employee name:");
- gets(emp_name.arr);
- emp_name.len=strlen(emp_name.arr);
- printf("/n/nEnter job:");
- gets(job.arr);
- job.len=strlen(job.arr);
- ind_job=0;
- if(!strcmp(job.arr,""))
- ind_job = -1;
- EXEC SQL INSERT INTO EMP(EMPNO,ENAME,JOB)
- VALUES(:emp_number,:emp_name,:job:ind_job);
- printf("/n/nEmployee %d inserted. /n",emp_number);
- EXEC SQL COMMIT;
- return;
- sqlerror:
- printf("/n%.70s/n",sqlca.sqlerrm.sqlerrmc);
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- EXEC SQL ROLLBACK;
- exit(1);
- }
- // 查询处理
- void query()
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int emp_number;
- VARCHAR emp_name[20];
- VARCHAR job[20];
- short ind_job;
- EXEC SQL END DECLARE SECTION;
- char empnum[8];
- printf("/n/nEnter Employee number (press RETURN to abort):");
- gets(empnum);
- if(!strcmp(empnum,""))
- {
- printf("/n");
- return;
- }
- emp_number = atoi(empnum);
- EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
- EXEC SQL WHENEVER NOT FOUND GOTO notfound;
- EXEC SQL SELECT ENAME,JOB
- INTO :emp_name,:job:ind_job
- FROM EMP
- WHERE EMPNO = :emp_number;
- emp_name.arr[emp_name.len]='/0';
- switch(ind_job)
- {
- case -1:strcpy(job.arr,"NULL");
- job.len=strlen(job.arr);
- break;
- case 0:job.arr[job.len]='/0';
- break;
- default:if(ind_job >0 )
- printf("/n/nWARNING: Job truncated./n");
- break;
- }
- printf("/n/nNumber Employee Name Job/n");
- printf("------------------------------------------/n");
- printf("%-9d%-15s%-8s/n",emp_number,emp_name.arr,job.arr);
- return;
- notfound:
- printf("/n/nWARING: Employee %d does not exist./n",emp_number);
- return;
- sqlerror:
- printf("/n%.70s/n",sqlca.sqlerrm.sqlerrmc);
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- EXEC SQL ROLLBACK;
- exit(1);
- }
- // 删除处理
- void del()
- {
- EXEC SQL BEGIN DECLARE SECTION;
- int emp_number;
- EXEC SQL END DECLARE SECTION;
- char empnum[8];
- printf("/n/nEnter employee number(press RETURN to abort):");
- gets(empnum);
- if(!strcmp(empnum,""))
- {
- printf("/n");
- return;
- }
- emp_number = atoi(empnum);
- EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
- EXEC SQL WHENEVER NOT FOUND GOTO notfound;
- EXEC SQL DELETE
- FROM EMP
- WHERE EMPNO = :emp_number;
- printf("/n/nEmployee %d deleted./n",emp_number);
- EXEC SQL COMMIT;
- return;
- notfound:
- printf("/n/nWARING: Employee %d does not exist./n",emp_number);
- return;
- sqlerror:
- printf("/n%.70s/n",sqlca.sqlerrm.sqlerrmc);
- EXEC SQL WHENEVER SQLERROR CONTINUE;
- EXEC SQL ROLLBACK;
- exit(1);
- }
2)将demo.pc预编译成demo.c:
- proc demo.pc
3)将demo.c编译成demo.obj:
- cl demo.c /nologo /c /I F:/app/tonko/product/11.1.0/db_1/precomp/public
4)将demo.obj链接成demo.exe:
- link demo.obj /nologo /LIBPATH:F:/app/tonko/product/11.1.0/db_1/precomp/LIB orasql11.lib
5)执行demo.exe进行测试。
0 0
- 一个使用Pro*C实现增删改查的小例子
- 一个使用Pro*C实现增删改查的小例子
- 一个使用ibatis对数据库增删改查的例子
- ibatis增删查改的一个例子
- mybatis实现的增删改查例子
- pro*c/c++ 访问数据库,实现基本增删改查
- ThinkPHP学习笔记(八)一个用户增删改查的小例子
- ThinkPHP学习笔记(八)一个用户增删改查的小例子
- 【C++】单链表的增删查改实现
- SpringMVC+hibernate整合小例子,用户的增删查改
- GreenDao的使用小例子和增删改查的方法
- SSI整合小例子-增删改查
- 一个简单的利用hibernate实现增删改查的例子
- MFC 数据库编程 增删改查的一个例子
- MFC 数据库编程 增删改查的一个例子
- web端一个增删改查例子
- Ext Grid实现增删改查的例子
- mybits最基本的例子---------实现增删改查
- 浏览器下载显示下载路径
- 杭电 Largest prime factor
- php单引号中字符串的转义("\")
- 关于onvif对接海康设备出现soap->error=4的问题
- OpenGL MSAA修饰词
- 一个使用Pro*C实现增删改查的小例子
- vector和map
- 对比SQL SERVER,ORACLE,DB2上的索引建立语句!
- piwik - 自定义变量
- 预处理器名字_cplusplus
- Git详解之三 Git分支
- Cocos2dx 2.x到3.0的改进地方
- 限制输入框只能输入数字
- POJ--2389:Bull Math 大数乘法