OCISvcCtx * svc; //服务上下文句柄
OCIStmt *stmt;//句子句柄
分配各句柄:
OCIHandleAlloc((dvoid *)env,(dvoid **)&ser,OCI_HTYPE_SERVER,0,NULL);//分配服务
器句柄(我个人理解)
OCIHandleAlloc((dvoid *)env,(dvoid **)&err,OCI_HTYPE_ERROR,0,NULL);//分配错误句
柄
OCIHandleAlloc((dvoid *)env,(dvoid **)&svc,OCI_HTYPE_SVCCTX,0,NULL);//分配服务
句柄
OCIHandleAlloc((dvoid *)env,(dvoid **)&user,OCI_HTYPE_SESSION,0,NULL);//分配用户
句柄
OCIHandleAlloc((dvoid *)env, (dvoid **)&stmt, OCI_HTYPE_STMT,0, NULL) ;//分配句子
句柄(这里的句子就是要执行的 PL/SQL 语句)
开始建立连接:
if(OCIServerAttach(ser,err,(text
*)"test",strlen("test"),OCI_DEFAULT)==OCI_SUCCESS)
printf("连接成功\n");
test 是 服 务 器 主 机 的 名 字 , 如 果 OCIServerAttach 执 行 成 功 也 就 是 等 于
OCI_SUCCESS,就输出连接成功。
下边就是一些设置:
服务器句柄和回话句柄都要设到服务句柄中,用户名和密码都设到回话里
OCIAttrSet((dvoid *)svc,OCI_HTYPE_SVCCTX,(dvoid
*)user,0,OCI_ATTR_SESSION,err);
OCIAttrSet((dvoid *)svc,OCI_HTYPE_SVCCTX,(dvoid *)ser,0,OCI_ATTR_SERVER,err);
OCIAttrSet((dvoid *)user,OCI_HTYPE_SESSION,(dvoid
*)"epgate",strlen("epgate"),OCI_ATTR_USERNAME,err);
OCIAttrSet((dvoid *)user,OCI_HTYPE_SESSION,(dvoid
*)"zxcvbn",strlen("zxcvbn"),OCI_ATTR_PASSWORD,err);
建立会话
OCISessionBegin(svc,err,user,OCI_CRED_RDBMS,OCI_DEFAULT);
以上就是连接服务器以及建立回话,也就是和数据库接线成功,可以进行操作了,接下来就
要执行 SQL 语句了。SQL 语句可以分为好几类,具体的我也记不清,有 DDL、DML、DQL
等等,这些语句操作的时候可以分为三大类:1、输入型的,像 CREAT、UPDATE、INSERT
等 2、输出型的, 像 SELECT 等 3、直接操作的
1、输入型:需要绑定变量,这些变量用于临时存储传入进来的值,也就是用户更新的数
据
定义绑定输入的句柄:OCIBind * bpara[5],有几个变量就写几,我的变量有五个
定义要存放这些数据的变量
struct students
{
char StudentName[20];