1、首先确定安装的oracle数据库是32位的还是64位的,在PLSQL Developer中通过此语句:SQL> select * from v$version;显示如下我的是32位
2、我使用的VS2008在选择Oracle中occi文件选择V8的:E:\Database\Orcal\product\11.2.0\dbhome_1\OCI\lib\MSVC\vc8下的oraocci11.dll,这些文件是安装oracle就有的,不需要再次下载。
3、将OCI文件中的所有文件复制到新建VS2008项目根目录下。
4、点击项目属性:C/C++的常规 附加包含目录下添加:..\ocilib\include,这是添加的是.h文件。
5、下面是我的ConnDB.h文件:
#include "stdafx.h"
//代码的目的就是验证makefile中oracle的头文件和lib文件路径是否正确了
#include <iostream>
#define WIN32COMMON //避免函数重定义错误 (注:这里引用的是oraocci11.lib只能使用Release不能使用Debug,如果使用Debug要引用oraocci11d.lib,这样引用的目的可以使用相对路径,移动别的电脑不用改变也能用)
#pragma comment(lib, "..\\ocilib\\lib\\MSVC\\vc8\\oraocci11.lib")//加入occi连接库(可以不在链接器依赖输入和附加库目录加入oraocci11.lib)
#include <occi.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
using namespace oracle::occi;
//表示引用了XP系统提供的ADO接口进行数据库操作
class ConnDB
{
public:
ConnDB();
virtual ~ConnDB();
public:
int OnInitConnDB();
void ExitConnect();
public:
Environment * env; //上下文件
Statement *pStmt; // SQL执行的Statement对象
Connection *conn; //连接数据库
};6、下面是我的ConnDB.cpp文件:
// connOrcale.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ConnDB.h"
ConnDB::ConnDB()
{
}
ConnDB::~ConnDB()
{
}
int ConnDB::OnInitConnDB()
{
///创建OCCI上下文环境
env = Environment::createEnvironment();
if (NULL == env) {
printf("createEnvironment error.\n");
return -1;
}
else
cout << "success" << endl;
string name = "rfiddata";//数据库用户名
string pass = "123456";//数据库密码
string srvName = "localhost:1521/orcl";//数据库服务名,这里使用的是localhost本地连接,如果使用ip的话,需要在oracle中设置 //E:\Database\Orcal\product\11.2.0\dbhome_1\NETWORK\ADMIN的listener.ora和tnsnames.ora中将(HOST = localhost)该成(HOST = 自己电脑IP)然后再将所有打开服务重启下。
try
{
//创建数据库连接
conn = env->createConnection(name, pass, srvName);//用户名,密码,数据库名
if (NULL == conn) {
printf("createConnection error.\n");
return -1;
}
else
cout << "conn success" << endl;
// 数据操作,创建Statement对象
//Statement *pStmt = NULL; // Statement对象
pStmt = conn->createStatement();
if (NULL == pStmt) {
printf("createStatement error.\n");
return -1;
}
}
catch (SQLException e)
{
cout << e.what() << endl;
system("pause");
return -1;
}
return 0;
}
void ConnDB::ExitConnect()
{
// 终止Statement对象
conn->terminateStatement(pStmt);
// 关闭连接
env->terminateConnection(conn);
// pEnv->terminateConnection(pConn);
// 释放OCCI上下文环境
Environment::terminateEnvironment(env);
cout << "end!" << endl;
}
7、下面是我的connOrcale.cpp文件:
// connOrcale.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ConnDB.h"
int main()
{
system("pause");//暂停dos环境
ConnDB m_ConnDB; //申明连接
int conn =m_ConnDB.OnInitConnDB();//连接,等于0则连接成功
if(conn !=0)//不成功再次连接
{
m_ConnDB.OnInitConnDB();
}
// 查询数据库时间
std::string sno,name,sex;
int age;
ResultSet *pRs = m_ConnDB.pStmt->executeQuery(
"select * from t_user");
while (pRs->next()) {
sno = pRs->getString(1);
name = pRs->getString(2);
sex = pRs->getString(3);
age = pRs->getInt(4);
printf("db time:%s \n", sno.c_str());
printf("db time:%s \n", name.c_str());
printf("db time:%s \n", sex.c_str());
printf("db time:%d \n", age);
// int类型取值用getInt()
//break;
}
m_ConnDB.pStmt->closeResultSet(pRs);
//--------插入---------
// 指定DML为自动提交
m_ConnDB.pStmt->setAutoCommit(TRUE); string aaa;
// 设置执行的SQL语句
//pStmt->setSQL("INSERT INTO TA (ID, NAME) VALUES (1, 'ZS')");
//pStmt->setSQL("insert into t_user(sno, name, sex, age)values('邓超', '99', '41',19)"); //pStmt->setSQL("insert into t_user(sno, name, sex, age)values('邓超', '99', '“+aaa+”',19)");//变量时得这样才能引用m_ConnDB.pStmt->setSQL("insert into readertime(rfiddevice, tagid, time)values('192.168.0.160', '123456', '123456')");// 设置执行的SQL语句 // 执行SQL语句 unsigned int nRet = m_ConnDB.pStmt->executeUpdate();if (nRet == 0)
{printf("executeUpdate insert error.\n");}m_ConnDB.ExitConnect();system("pause");return 0;}
成功连接数据获取数据。
本文介绍如何在Visual Studio 2008环境下配置Oracle数据库连接,包括选择正确的Oracle OCI文件、配置项目属性及包含目录、实现连接与查询功能的代码示例。
1107





