在VC中构造Pro*C的开发环境
2007-06-12 13:35
246 查看
用Pro*C开发Oracle数据库的应用程序,可以在源代码中同时使用SQL语句和C语句;一般这种源文件的后缀名为*.pc;要编译这种文件首先要用Pro*C的预编译器(Oracle10g的预编译器proc.exe)将pc文件编译生成C/C++代码的文件。这个过程就是把SQL语句部分转换成C语言的形式,而其它部分则不变。最后通过链接Pro*C的库文件(Oracle10g的库文件为orasql10g.lib)生成可执行程序。针对不同的Oracle数据库,最好使用相应的预编译器和链接库。要开发Pro*C应用程序,必须安装Oracle Pro*C的开发环境,一般安装好Oracle服务器或客户端后都自带了;要执行Pro*C应用程序,必须在执行机上安装好Oracle服务器或客户端,并正确配置Oracle_Home/NETWOK/ADMIN/tnsnames.ora文件,因为Pro*C应用程序执行时要到Oracle_Home目录中读取这个文件的oracle服务器IP(或机器名)、协议、数据库实例(SID)等信息。
下面以Oracle10g为例配置Pro*C的开发环境。
安装好Oracle10g后有一个Oracle工作目录叫Oracle_Home如:E:/oracle/product/10.2.0/db_1,在VC的Tools/Option/Directory中分别将Oracle_Home/Bin、Oracle_Home/ precomp/public、Oracle_Home/precomp/lib加到Excutable Files、Include Files、Library Files选项中。然后在工程中新建一个pc文件,如db.pc,在File view中选中此文件,右击/Option/Custom Buid,在Commands中输入proc DB.pc oname=DB.cpp,在Outpus中输入DB.cpp,最后将orasql10.lib添加到工程中,这样就可以在db.pc文件中编写SQL和C/C++代码,编译工程的时候,如果db.pc文件发生改变,则会重新生成DB.cpp文件,注意在DB.cpp时在db.pc内容的前面加了一段C语言的代码,如果要用C++的形式编译则要将这一段用exter “C”{}括起来
Pro*C的连接:
#include <sqlda.h>
EXEC SQL INCLUDE sqlca;
void sql_error()
{
char err_msg[128L];
int buf_len, msg_len;
EXEC SQL WHENEVER SQLERROR CONTINUE;
buf_len=sizeof(err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s", msg_len, err_msg);
EXEC SQL ROLLBACK RELEASE;
}
BOOL _Connect(char *pcConnectionString)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR varConnectionString[64L] ;
EXEC SQL END DECLARE SECTION;
strcpy((char *)varConnectionString.arr, pcConnectionString);
varConnectionString.len = (unsigned short)strlen((char *)varConnectionString.arr);
EXEC SQL CONNECT :varConnectionString;
if (sqlca.sqlcode < 0L)
{
sql_error();
return FALSE;
}
return TRUE;
}
pcConnectionString的写法为用户名/密码@服务名如sys/123@orcl,其中服务名为tnsnames.ora文件中的服务名,如:
orcl = #此即为服务名
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_sid)
)
)
游标的使用:
BOOL ZZZB0101(vector<CZZZB0101Fields>& vecFields)
{
CStuednts students;
EXEC SQL BEGIN DECLARE SECTION;
char acID[8L];
char acName[8L];
int nAge;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE cur_Student CURSOR FOR
SELECT
ID,
NAME,
Age,
FROM
Student
WHERE
ID = GM.SYOKUIN_CD
ORDER BY
ID;
EXEC SQL OPEN cur_Student;
if (sqlca.sqlcode < 0L)
{
sql_error();
return FALSE;
}
for ( ; ; )
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH cur_Student 0101 INTO
:acID,
:acName,
:nAge
CSudent student
student.ID = acID;
student. Name = acName;
student. nAge = nAge;
students.push_back(student);
}
EXEC SQL CLOSE cur_Student;
return TRUE;
}
在同一个PC文件中不能使用相同名的游标
作者: 王伟 xbdtb@163.com
下面以Oracle10g为例配置Pro*C的开发环境。
安装好Oracle10g后有一个Oracle工作目录叫Oracle_Home如:E:/oracle/product/10.2.0/db_1,在VC的Tools/Option/Directory中分别将Oracle_Home/Bin、Oracle_Home/ precomp/public、Oracle_Home/precomp/lib加到Excutable Files、Include Files、Library Files选项中。然后在工程中新建一个pc文件,如db.pc,在File view中选中此文件,右击/Option/Custom Buid,在Commands中输入proc DB.pc oname=DB.cpp,在Outpus中输入DB.cpp,最后将orasql10.lib添加到工程中,这样就可以在db.pc文件中编写SQL和C/C++代码,编译工程的时候,如果db.pc文件发生改变,则会重新生成DB.cpp文件,注意在DB.cpp时在db.pc内容的前面加了一段C语言的代码,如果要用C++的形式编译则要将这一段用exter “C”{}括起来
Pro*C的连接:
#include <sqlda.h>
EXEC SQL INCLUDE sqlca;
void sql_error()
{
char err_msg[128L];
int buf_len, msg_len;
EXEC SQL WHENEVER SQLERROR CONTINUE;
buf_len=sizeof(err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s", msg_len, err_msg);
EXEC SQL ROLLBACK RELEASE;
}
BOOL _Connect(char *pcConnectionString)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR varConnectionString[64L] ;
EXEC SQL END DECLARE SECTION;
strcpy((char *)varConnectionString.arr, pcConnectionString);
varConnectionString.len = (unsigned short)strlen((char *)varConnectionString.arr);
EXEC SQL CONNECT :varConnectionString;
if (sqlca.sqlcode < 0L)
{
sql_error();
return FALSE;
}
return TRUE;
}
pcConnectionString的写法为用户名/密码@服务名如sys/123@orcl,其中服务名为tnsnames.ora文件中的服务名,如:
orcl = #此即为服务名
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_sid)
)
)
游标的使用:
BOOL ZZZB0101(vector<CZZZB0101Fields>& vecFields)
{
CStuednts students;
EXEC SQL BEGIN DECLARE SECTION;
char acID[8L];
char acName[8L];
int nAge;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE cur_Student CURSOR FOR
SELECT
ID,
NAME,
Age,
FROM
Student
WHERE
ID = GM.SYOKUIN_CD
ORDER BY
ID;
EXEC SQL OPEN cur_Student;
if (sqlca.sqlcode < 0L)
{
sql_error();
return FALSE;
}
for ( ; ; )
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH cur_Student 0101 INTO
:acID,
:acName,
:nAge
CSudent student
student.ID = acID;
student. Name = acName;
student. nAge = nAge;
students.push_back(student);
}
EXEC SQL CLOSE cur_Student;
return TRUE;
}
在同一个PC文件中不能使用相同名的游标
作者: 王伟 xbdtb@163.com
相关文章推荐
- 在VC++开发环境中整合Pro*C/C++ (〖都来刻米〗,有话要说)
- 在VC++开发环境中整合Pro*C/C++
- VC/DDK/DriverWorks开发环境配置
- VC 6.0 下搭建 wxWidgets 开发环境
- 构造Scala开发环境并创建ApiDemos示例项目
- vc下proc开发环境与pclint的配置-VC下proc开发
- VC下利用Pro*C开发Oracle接口
- VC++.net 整合开发环境使用技巧
- 如何在VC中配置winPcap开发环境
- 构造前端开发环境
- ucos_ii VC++ 6.0开发环境建立
- 在VB应用程序中调用VC环境下开发的DLL
- VS2008 PRO 、WDK 和DDKWizard搭建Vista驱动开发环境
- Pro C/C++ 和 vs2010开发环境融合
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
- 在非VS环境下C++ Builder,Delphi,VC,VB等调用C#开发的DLL的完整方法
- VC Directsound开发环境配置
- 简单建立VC + DDK的驱动开发环境
- VC2012安装Opengl开发环境
- VC 6中配置OpenGL开发环境