ORACLE客户端TNSNAME.ORA配置:
HS2008 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.71.128)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = HS2008)
)
)
先将PROC集成到VC环境,具体操作网上可查。
新建SQL SCRIPT FILE,可以.PC后缀。代码(OracleTest.pc):
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
using namespace std;
void connect()
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20],password[20],server[20];
EXEC SQL END DECLARE SECTION;
cout << "输入数据库用户名:" << endl;
gets(username);
//username.len = strlen((char*)username.arr);
cout << "输入密码:" << endl;
gets(password);
//password.len = strlen((char*)password.arr);
strcpy(server,"HS2008");
//server.len = strlen((char*)server.arr);
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
if(sqlca.sqlcode == 0)
cout << "数据库连接成功!" << endl;
else
cout << "数据库连接失败!" << endl;
}
void disconnect()
{
fflush(stdin);
EXEC SQL COMMIT WORK RELEASE;
cout << "提交事务,断开连接!" << endl;
}
void sql_error();
void manipulate()
{
EXEC SQL BEGIN DECLARE SECTION;
char CompanyName[20];
int InitDate;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT company_name,init_date INTO :CompanyName,:InitDate FROM hs_user.sysarg where rownum = 1;
if(sqlca.sqlcode == 0)
{
cout << "company_name=" << CompanyName << ",init_date=" << InitDate << endl;
}
else
{
sql_error();
}
}
void sql_error()
{
char err_msg[200];
int buf_len,msg_len;
buf_len = sizeof(err_msg);
EXEC SQL WHENEVER SQLERROR CONTINUE;
sqlglm(err_msg,&buf_len,&msg_len);
cout << err_msg << ";sqlcode=" << sqlca.sqlcode << endl;
EXEC SQL ROLLBACK RELEASE;
}
int main()
{
connect();
manipulate();
disconnect();
return 0;
}
经PRO*C预编译生成.C文件,可改为CPP后缀,添加进工程,进行编译,可进行。预编译后的代码(OracleTest.cpp):
/* Result Sets Interface */
#ifndef SQL_CRSR
# define SQL_CRSR
struct sql_cursor
{
unsigned int curocn;
void *ptr1;
void *ptr2;
unsigned int ma