看了一下基本是OCI库的函数,但是OCI应该已经连上了
#include<iostream>
#include<occi.h>
#include<oci.h>
using namespace std;
using namespace oracle::occi;
int main()
{
OCIEnv *envhp;
OCIStmt *stmthp;
OCIServer *srvhp;
OCISession *sesshp;
OCIError *errhp;
OCISvcCtx *svchp;
// 申请OCI环境句柄
int err = OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid*)0, (dvoid*(*)(dvoid*, size_t))0, (dvoid*(*)(dvoid*, dvoid*, size_t))0, (void(*)(dvoid*, dvoid*))0, (size_t)0, (dvoid**)0);
// 申请服务句柄
err = OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);
// 申请会话句柄
err = OCIHandleAlloc(envhp, (dvoid**)&sesshp, OCI_HTYPE_SESSION, (size_t)0, (dvoid**)0);
// 申请语句句柄
err = OCIHandleAlloc(envhp, (dvoid**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0);
// 设置服务名称
const char* db_name = "orcl";
ub4 OCI_ATTR_SERVER_NAME;
err = OCIAttrSet(srvhp, OCI_HTYPE_SERVER, (dvoid*)db_name, strlen(db_name), OCI_ATTR_SERVER_NAME, errhp);
// 连接数据库
const char* user_name = "system";//连接的用户名
const char* password = "123456";//连接的密码
const char* dblink = 0;//连接方式
ub4 dblink_len = 0;
err = OCILogon2(envhp, errhp, &svchp, (CONST OraText*)user_name, strlen(user_name), (CONST OraText*)password, strlen(password), (CONST OraText*)dblink, (ub4)dblink_len, 0);
// 执行SQL语句
const char* sql = "select empno from emp where empno=:1";
err = OCIStmtPrepare(stmthp, errhp, (CONST OraText*)sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
ub2 empno = 7900;// 输入的empno
OCIBind* bindhp;
err = OCIBindByPos(stmthp, &bindhp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, 0, 0, OCI_DEFAULT);
OCIDefine* dfnhp;
ub2 out_empno;
ub2 ind;
ub2 out_len;
//ERRCALL(OCIDefineByPos(stmthp, &dfnhp, errhp, 1, (dvoid*)&out_empno, sizeof(out_empno), SQLT_INT, &ind, &out_len, 0, OCI_DEFAULT));
err = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);
err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
while(err == OCI_SUCCESS)
{
cout << out_empno << endl;
err = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT);
}
// 断开连接
OCILogoff(svchp, errhp);
OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
OCIHandleFree(sesshp, OCI_HTYPE_SESSION);
OCIHandleFree(stmthp, OCI_HTYPE_STMT);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
return 0;
}
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIHandleFree,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCILogoff,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtFetch,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtExecute,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIBindByPos,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIStmtPrepare,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCILogon2,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIAttrSet,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIHandleAlloc,该符号在函数 _main 中被引用
1>3.obj : error LNK2019: 无法解析的外部符号 _OCIEnvCreate,该符号在函数 _main 中被引用
1>C:\Users\Administrator\Desktop\3\Debug\3.exe : fatal error LNK1120: 10 个无法解析的外部命令