• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

达梦(5)通过DCI实现增删改查

mysql 搞代码 4年前 (2022-01-09) 44次浏览 已收录 0个评论

达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 DM_program p261 中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。 VS 设置: 常规 – 输出目录 – c:\dmdbms\bin 备注: 为了省事这

达梦有仿照OCI(Oracle Call Interface)实现了一套DCI 的接口实现。具体在 <> p261

中有说明。我照着这个实现编译了下,发现可能依文档编译时有点问题,把有问题的地方改了下,记录在这。
VS 设置:

常规 -> 输出目录 -> c:\dmdbms\bin

备注: 为了省事这样弄的,实际发布时,把C:\dmdbms\bin下的.dll文件都复制过去就行了。

C/C++ -> 常规 -> 附加包含目录 -> c:\dmdbms\include 链接器 -> 附加库目录 -> c:\dmdbms\include 链接器 -> 附加依赖项 -> dmoci.lib

#include #include #include #include #include "DCI.h"/*   声明句柄  */  OCIEnv    *envhp;      /*   环境句柄    */  OCISvcCtx  *svchp;      /*   服务环境句柄  */  OCIServer    *srvhp;       /*   服务器句柄  */  OCISession   *authp;       /*   会话句柄    */  OCIStmt      *stmthp;      /*   语句句柄    */  OCIDescribe  *dschp;      /*   描述句柄    */  OCIError     *errhp;       /*   错误句柄    */  OCIDefine   *defhp[3];      /*   定义句柄    */  OCIBind    *bidhp [4];     /*   绑定句柄    */  sb2      ind[3];       /*   指示符变量  */  /*   绑定select结果集的参数  */  text       szpersonid[11];    /*   存储personid列  */  text       szsex[2];      /*   存储sex列  */  text       szname[51];     /*   存储name列  */  text       szemail[51];     /*   存储mail列  */  text       szphone[26];    /*   存储phone列  */  char       sql[256] = {0};       /*   存储执行的sql语句*/  int DMDemo();int main(){	DMDemo();	system("pause");	return 0;}int DMDemo(){  char strServerName[50];    char strUserName[50];   char strPassword[50];    /*   设置服务器,用户名和密码  */    st<strong>本文来源gaodai#ma#com搞@代~码^网+</strong>rcpy(strServerName,"localhost");    strcpy(strUserName,"SYSDBA");    strcpy(strPassword,"111111"); //SYSDBA  /* 初始化OCI应用环境*/    OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL);   /* 初始化环境句柄  */    OCIEnvInit(&envhp, OCI_DEFAULT,0, 0);   /*  分配句柄    */    OCIHandleAlloc(envhp, (dvoid**)&svchp, OCI_HTYPE_SVCCTX, 0, 0);    /*   服务器环境句柄    */      OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, 0, 0);    /*   服务器句柄    */    OCIHandleAlloc(envhp, (dvoid**)&authp, OCI_HTYPE_SESSION, 0, 0);  /*   会话句柄    */    OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0);    /*   错误句柄 */    OCIHandleAlloc(envhp, (dvoid**)&dschp, OCI_HTYPE_DESCRIBE,0,0);    /*   描述符句柄    */    /*   连接服务器    */    OCIServerAttach(srvhp, errhp,(text *)strServerName,       (sb4)strlen(strServerName),OCI_DEFAULT ) ;    /*   设置用户名和密码  */    OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strUserName,      (ub4)strlen(strUserName),OCI_ATTR_USERNAME,errhp);    OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strPassword,     (ub4)strlen(strPassword), OCI_ATTR_PASSWORD,errhp);    /*   设置服务器环境句柄属性  */    OCIAttrSet ((dvoid*)svchp, (ub4) OCI_HTYPE_SVCCTX,       (dvoid*)srvhp, (ub4) 0, OCI_ATTR_SERVER, errhp);    OCIAttrSet(svchp, OCI_HTYPE_SVCCTX,(dvoid*)authp,       0, OCI_ATTR_SESSION, errhp);   /*   创建并开始一个用户会话  */    OCISessionBegin (svchp, errhp, authp,OCI_CRED_RDBMS,OCI_DEFAULT);   OCIHandleAlloc(envhp, (dvoid**)&stmthp,OCI_HTYPE_STMT, 0, 0);    /*   语句句柄   */    /************************************************************************/   /* 查询person 表                                                         */    /************************************************************************/    strcpy(sql, "select personid, name, phone from person.person;");    /*   准备SQL 语句    */    OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);   /*   绑定输出列    */    OCIDefineByPos(stmthp,&defhp[0],errhp, 1,(ub1*)szpersonid,       sizeof(szpersonid),SQLT_STR,&ind[0], 0, 0, OCI_DEFAULT);   OCIDefineByPos (stmthp,&defhp[1],errhp, 2,(ub1*)szname,       sizeof(szname),SQLT_STR,&ind[1], 0, 0, OCI_DEFAULT);    OCIDefineByPos (stmthp,&defhp[ 2],errhp, 3,(ub1*)szphone,	  sizeof(szphone),SQLT_STR,&ind[2], 0, 0, OCI_DEFAULT);   /*   执行SQL 语句    */    OCIStmtExecute(svchp, stmthp,errhp, (ub4)0, 0, NULL, NULL, OCI_DEFAULT);       printf("% -10s%-10s%-10s\n", "PERSONID", "NAME", "PHONE");   while((OCIStmtFetch( stmthp, errhp,1,OCI_FETCH_NEXT,OCI_DEFAULT))!=OCI_NO_DATA)    {       printf("% -10s", szpersonid);     printf("% -10s", szname);      printf("% -10s\n", szphone);     }   /************************************************************************/   /* 向person 表插入一条数据                                               */    /************************************************************************/ 	  memset(sql, 0, sizeof(sql));  	  strcpy(sql, "insert into person.person(sex, name, email, phone) values(:sex,:name,:email,:phone);"); 	  /*   准备SQL 语句    */  	  OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); 	  /*   绑定输入列    */ 	  const OraText col_sex[] = ":sex";	  const OraText col_name[] = ":name";	  const OraText col_email[] = ":email";	  const OraText col_phone[] = ":phone";	  OCIBindByName(stmthp, &bidhp[0], errhp, col_sex, 4, szsex, sizeof(szsex),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	  OCIBindByName(stmthp, &bidhp[1], errhp, col_name, 5, szname, sizeof(szname), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	  OCIBindByName(stmthp, &bidhp[2], errhp, col_email, 6, szemail, sizeof(szemail),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	  OCIBindByName(stmthp, &bidhp[3], errhp, col_phone, 6, szphone, sizeof(szphone),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  		//OCIBindByName(stmthp, &bidhp[0], errhp, ":sex", 4, szsex, sizeof(szsex),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	//OCIBindByName(stmthp, &bidhp[1], errhp, ":name", 5, szname, sizeof(szname), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	//OCIBindByName (stmthp, &bidhp[2], errhp, ":email", 6, szemail, sizeof(szemail),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	//OCIBindByName (stmthp, &bidhp[3], errhp, ":phone", 6, szphone, sizeof(szphone),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	/*   设置输入参数  */  	memset(szsex, 0, sizeof(szsex)); 	//strcpy(szsex, "M");  	memcpy(szsex,"M",strlen("M")+1);	memset(szname, 0, sizeof(szname)); 	//strcpy(szname, " 张三");  	memcpy(szname,"张三",strlen("张三")+1);	memset(szemail, 0, sizeof(szemail)); 	//strcpy(szemail, "[email protected]");  	memcpy(szemail,"[email protected]",strlen("[email protected]")+1);	memset(szphone, 0, sizeof(szphone));  	memcpy(szphone,"027-87588000",strlen("027-87588000")+1);	//strcpy(szphone, "027-87588000");  	/*   执行SQL 语句    */  	  OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0,(ub4) OCI_DEFAULT);  	  /*   提交到数据库  */ 	  OCITransCommit(svchp, errhp, OCI_DEFAULT);  	  /************************************************************************/ 	  /* 更新person 表                         */  	  /************************************************************************/ 	  memset(sql, 0, sizeof(sql));  	  strcpy(sql, "update person.person set sex='M',name='Liuhuan',email='liujian@mail',phone='13636396811' WHERE personid=1");  	  /*   准备SQL 语句    */  	  OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT); 	  /*   执行SQL 语句    */  	  OCIStmtExecute (svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0,(ub4) OCI_DEFAULT);  	  /*   提交到数据库  */  	  OCITransCommit(svchp, errhp, OCI_DEFAULT);  	  /************************************************************************/ 	  /* 删除person 表的ID为的数据,首先要在数据库中存在这条记录         */  	  /************************************************************************/ 	  memset(sql, 0, sizeof(sql));  	  strcpy(sql, "delete from person.person WHERE personid=?");  	  /*   准备SQL 语句    */  	  OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);  	  /*   绑定输入参数  */  	  memset(szpersonid, 0, sizeof(szpersonid));  	  memcpy(szpersonid,"20",strlen("20")+1);	  //strcpy(szpersonid, "20"); 	  OCIBindByPos(stmthp, &bidhp[0], errhp, 1, szpersonid, sizeof(szpersonid),SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);  	  /*   执行SQL 语句    */  	  OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT);  	  /*   提交到数据库  */  	  OCITransCommit(svchp, errhp, OCI_DEFAULT);  	  // 结束会话 	  OCISessionEnd(svchp, errhp, authp, (ub4) 0); 	  // 断开与数据库的连接 	  OCIServerDetach(srvhp, errhp, OCI_DEFAULT);  	  // 释放OCI句柄  	  OCIHandleFree((dvoid*)dschp, OCI_HTYPE_DESCRIBE); 	  OCIHandleFree((dvoid*)stmthp, OCI_HTYPE_STMT ); 	  OCIHandleFree((dvoid*)errhp, OCI_HTYPE_ERROR); 	  OCIHandleFree((dvoid*)authp, OCI_HTYPE_SESSION ); 	  OCIHandleFree(( dvoid*)svchp, OCI_HTYPE_SVCCTX); 	  OCIHandleFree((dvoid*)srvhp, OCI_HTYPE_SERVER);  	  return 0;    }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:达梦(5)通过DCI实现增删改查
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址