DM API和OCI编程方式比较
2008-09-03 12:50:56 来源:WEB开发网 intc1;
intlen1;
intc2[101];
intlen2;
c2[100]=0;
//执行查询语句生成结果集
dm_direct_exec(hstmt,“selectc1,c2fromt”);
//绑定第一列
dm_bind_column(hstmt,1,DM_DATA_INT,TYPE_INT,&c1,4,&len1,0);
//绑定第二列
dm_bind_column(hstmt,2,DM_DATA_CHAR,TYPE_CHAR,c2,100,&len2,0);
//提取结果集
while(dm_fetch(hstmt,NULL)==0){
printf("c1:%d,c2:%s",c1,c2);
}
//提取完以后需要关闭游标句柄
dm_close_stmt(hstmt);
b) OCI
OCI在绑定的时候只有一种形式,通过调用OCIDefineByPos来实现对每个列的绑定,如果你需要一次性获取多行,你还需要调用OCIDefineArrayOfStruct函数来约定每个值跟下一个值之间的偏移量。一次性获取的行数可以在OCIStmtExecute或OCIStmtFetch函数中指定,下面列出对OCIDefineByPos的注释:
swordOCIDefineByPos(
OCIStmt*stmtp,/*语句句柄*/
OCIDefine**defnp,/*绑定输出指针*/
OCIError*errhp,/*错误句柄*/
ub4position,/*绑定列的位置*/
dvoid*valuep,/*缓冲区指针*/
sb4value_sz,/*单个值的大小*/
ub2dty,/*要转化成的OCI数据类型*/
dvoid*indp,/*空值指示符*/
ub2*rlenp,/*实际返回长度指示符*/
ub2*rcodep,/*下面两参数为保留参数*/
ub4mode
)
跟据上面API的例子,在这里给出OCI的代码:
intc1;
intlen1;
intc2[101];
intlen2;
c2[100]=0;
text*sqlstmt=(text*)"selectc1,c2fromt";
//在绑定前先要准备语句
OCIStmtPrepare(stmthp,errhp,sqlstmt,(ub4)strlen((char*)sqlstmt),
(ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT);
//绑定第一列
OCIDefineByPos(stmthp,NULL,errhp,(ub4)1,
(dvoid*)&c1,(sb4)sizeof(int),(ub2)SQLT_INT,
(dvoid*)0,(ub2*)0,(ub2*)0,(ub4)OCI_DEFAULT)
//绑定第二列
OCIDefineByPos(stmthp,NULL,errhp,(ub4)2,
(dvoid*)c2,(sb4)100,(ub2)SQLT_AFC,
(dvoid*)0,(ub2*)0,(ub2*)0,(ub4)OCI_DEFAULT)
OCIStmtExecute(svchp,stmthp,errhp,(ub4)0,(ub4)0,(CONSTOCISnapshot*)0,(OCISnapshot*)0,(ub4)OCI_DEFAULT);
//在这里每次提取一行
while(OCIStmtFetch(stmthp,errhp,1,OCI_FETCH_NEXT,0)==0){
printf("c1:%d,c2:%s",c1,c2);
}
6. 释放连接
a) API
在执行完所有的SQL操作以后,需要断开跟数据库服务器的连接。API在断开时需要释放所申请的所有句柄,包括语句句柄,连接句柄和环境句柄,语句句柄需要在断开连接之前释放。
dm_close_stmt(hstmt);
/*释放语句句柄*/
dm_free_stmt(hstmt);
/*断开与数据源之间的连接*/
dm_logout(hdbc);
/*释放连接句柄*/
dm_free_connect(hdbc);
/*释放环境句柄*/
dm_free_env(henv);
b) OCI
OCI跟API一样,断开连接以后需要释放所有的句柄,这些释放工作都是通过调用OCIHandleFree来完成,例子可以参看连接部分的代码。
7. 结束语
我们可以看到,API和OCI在使用上都有几份类似,在连接和释放上面,两者区别不大,但是在参数和结果集绑定上面,API使用的时候比较的灵活多变,有很多参数可以灵活的指定,但是使用起来感觉比较复杂,而OCI则简单多了,但是同样可以实现API绑定的大部分功能。如果想要更详细的了解API和OCI,那么请参看ODBC标准手册和ORACLE的OCI说明手册,哪上面有更加详细的使用介绍。
- ››DM API和OCI编程方式比较
- ››API之菜单函数
- ››API之控件与消息函数
- ››API之进程和线程函数
- ››API之打印函数
- ››API之位图、图标和光栅运算函数
- ››API之网络函数
- ››API之设备场景函数
- ››API之消息函数
- ››API之文本和字体函数
- ››API文件产生器-javadoc.exe
- ››API解读:Thread
更多精彩
赞助商链接