WEB开发网
开发学院数据库Oracle DM API和OCI编程方式比较 阅读

DM API和OCI编程方式比较

 2008-09-03 12:50:56 来源:WEB开发网   
核心提示: b) OCIOCI的参数绑定动作需要使用OCIBindByPos或OCIBindByName函数协同OCIBindArrayOfStruct函数来完成,并且绑定动作必需放在准备语句和执行语句之间进行,DM API和OCI编程方式比较(4),在OCI中,为了兼容ORACLE的语法,OCI的代

b) OCI

OCI的参数绑定动作需要使用OCIBindByPos或OCIBindByName函数协同OCIBindArrayOfStruct函数来完成,并且绑定动作必需放在准备语句和执行语句之间进行。在OCI中,为了兼容ORACLE的语法,SQL语句中的参数是以冒号开头的,冒号后面跟一个名字用来表示参数的名称,所以,OCI绑定参数时即可以按参数位置绑定(OCIBindByPos),也可以按参数名来绑定(OCIBindByName),OCIBindArrayOfStruct函数是用来指定在多行参数绑定时,每个参数跟下一个参数的偏移量。具体有解释可以参考OCI手册。下面列举OCIBindByPos的参数:

sword OCIBindByName (OCIStmt *stmtp, /*语句句柄*/

OCIBind **bindp, /*输出的绑定结构句柄*/

OCIError *errhp,/*错误信息句柄*/

CONST OraText *placeholder, /*参数的名称*/

sb4 placeh_len, /*参数名称的长度*/

dvoid *valuep, /*参数值的缓冲区指针*/

sb4 value_sz, /*单个值的长度*/

ub2 dty, /*参数的OCI数据类型*/

dvoid *indp, /*参数值的指示符*/

ub2 *alenp, /*下面都是保留参数*/

ub2 *rcodep,

ub4 maxarr_len,

ub4 *curelep,

ub4 mode)

对应上面API的实现,OCI的代码应该如下:

   intc1;
  charc2[100];
  text*sqlstmt=(text*)"insertintot(c1,c2)values(?,?)";
  //在绑定前先要准备语句
  OCIStmtPrepare(stmthp,errhp,sqlstmt,(ub4)strlen((char*)sqlstmt),
  (ub4)OCI_NTV_SYNTAX,(ub4)OCI_DEFAULT);
  //绑定:c1参数
  OCIBindByName(stmtp,NULL,errhp,“:c1”,3,&c1,4,SQLT_INT,NULL,NULL,NULL,0,NULL,0);
  //绑定:c2参数
  OCIBindByName(stmtp,NULL,errhp,“:c2”,3,&c2,100,SQLT_AFC,NULL,NULL,NULL,0,NULL,0);
  //下面对要插入的参数赋值
  c1=1;
  len1=4;//值c1的大小,按字节计算
  memset(c2,‘a’,100);
  len2=100;//参数c2的大小,按字节计算
  //执行带参数的语句,执行完成以后1和’aaa..’就会被插入到表t的c1和c2字段中
  OCIStmtExecute(svchp,stmthp,errhp,(ub4)1,(ub4)0,(CONSTOCISnapshot*)0,(OCISnapshot*)0,(ub4)OCI_DEFAULT);

上一页  1 2 3 4 5 6  下一页

Tags:DM API OCI

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接