1. /************************************************************************/
  2. /* DCI编程实例 */
  3. /************************************************************************/
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <malloc.h>
  8. #include "DCI.h"
  9. /* 声明句柄 */
  10. OCIEnv *envhp; /* 环境句柄 */
  11. OCISvcCtx *svchp; /* 服务环境句柄 */
  12. OCIServer *srvhp; /* 服务器句柄 */
  13. OCISession *authp; /* 会话句柄 */
  14. OCIStmt *stmthp; /* 语句句柄 */
  15. OCIDescribe *dschp; /* 描述句柄 */
  16. OCIError *errhp; /* 错误句柄 */
  17. OCIDefine *defhp[3]; /* 定义句柄 */
  18. OCIBind *bidhp [4]; /* 绑定句柄 */
  19. sb2 ind[3]; /* 指示符变量 */
  20. /* 绑定select结果集的参数 */
  21. text szpersonid[11]; /* 存储personid列 */
  22. text szsex[2]; /* 存储sex列 */
  23. text szname[51]; /* 存储name列 */
  24. text szemail[51]; /* 存储mail列 */
  25. text szphone[26]; /* 存储phone列 */
  26. char sql[256]; /* 存储执行的sql语句*/
  27. int main(int argc, char *argv[])
  28. {
  29. char strServerName[50];
  30. char strUserName[50];
  31. char strPassword[50];
  32. /* 设置服务器,用户名和密码 */
  33. strcpy(strServerName,"localhost:5236");
  34. strcpy(strUserName,"SYSDBA");
  35. strcpy(strPassword,"SYSDBA");
  36. /* 初始化OCI应用环境*/
  37. OCIInitialize(OCI_DEFAULT, NULL, NULL, NULL, NULL);
  38. /* 初始化环境句柄 */
  39. OCIEnvInit(&envhp, OCI_DEFAULT,0, 0);
  40. /* 分配句柄 */
  41. OCIHandleAlloc(envhp, (dvoid**)&svchp, OCI_HTYPE_SVCCTX, 0, 0); /* 服务器环境句 柄 */
  42. OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, 0, 0); /* 服务器句柄 */
  43. OCIHandleAlloc(envhp, (dvoid**)&authp, OCI_HTYPE_SESSION, 0, 0); /* 会话句柄 */
  44. OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0); /* 错误句柄 */
  45. OCIHandleAlloc(envhp, (dvoid**)&dschp, OCI_HTYPE_DESCRIBE,0,0); /* 描述符句 柄 */
  46. /* 连接服务器 */
  47. OCIServerAttach(srvhp, errhp,(text *)strServerName, (sb4)strlen(strServerName),OCI_DEFAULT);
  48. /* 设置用户名和密码 */
  49. OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strUserName, (ub4)strlen(strUserName),OCI_ATTR_USERNAME,errhp);
  50. OCIAttrSet(authp,OCI_HTYPE_SESSION,(text *)strPassword, (ub4)strlen(strPassword), OCI_ATTR_PASSWORD,errhp);
  51. /* 设置服务器环境句柄属性 */
  52. OCIAttrSet ((dvoid*)svchp, (ub4) OCI_HTYPE_SVCCTX, (dvoid*)srvhp, (ub4) 0, OCI_ATTR_SERVER, errhp);
  53. OCIAttrSet(svchp, OCI_HTYPE_SVCCTX,(dvoid*)authp, 0, OCI_ATTR_SESSION, errhp);
  54. /* 创建并开始一个用户会话 */
  55. OCISessionBegin (svchp, errhp, authp,OCI_CRED_RDBMS,OCI_DEFAULT);
  56. OCIHandleAlloc(envhp, (dvoid**)&stmthp,OCI_HTYPE_STMT, 0, 0); /* 语句句柄 */
  57. /************************************************************************/
  58. /* 查询person表 */
  59. //查询表空间:select * from SYSOBJECTS;
  60. /************************************************************************/
  61. strcpy(sql, "select personid, name, phone from person.person;");
  62. /* 准备SQL语句 */
  63. OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);
  64. /* 绑定输出列 */
  65. OCIDefineByPos (stmthp,&defhp[0],errhp, 1,(ub1*)szpersonid, sizeof(szpersonid),SQLT_STR,&ind[0], 0, 0, OCI_DEFAULT);
  66. OCIDefineByPos (stmthp,&defhp[1],errhp, 2,(ub1*)szname, sizeof(szname),SQLT_STR,&ind[1], 0, 0, OCI_DEFAULT);
  67. OCIDefineByPos (stmthp,&defhp[2],errhp, 3,(ub1*)szphone, sizeof(szphone),SQLT_STR,&ind[2], 0, 0, OCI_DEFAULT);
  68. /* 执行SQL语句 */
  69. OCIStmtExecute(svchp, stmthp,errhp, (ub4)0, 0, NULL, NULL, OCI_DEFAULT);
  70. printf("%-10s%-10s%-10s\n", "PERSONID", "NAME", "PHONE");
  71. while((OCIStmtFetch(stmthp, errhp,1,OCI_FETCH_NEXT,OCI_DEFAULT))!=OCI_NO_DATA)
  72. {
  73. printf("%-10s", szpersonid);
  74. printf("%-10s", szname);
  75. printf("%-10s\n", szphone);
  76. }
  77. /************************************************************************/
  78. /* 向person表插入一条数据 */
  79. //create table images(name IMAGE);
  80. //insert into images values ('/home/01.jpg');
  81. /************************************************************************/
  82. memset(sql, 0, sizeof(sql));
  83. strcpy(sql, "insert into person.person(sex, name, email, phone) values(:sex,:name,:email,:phone);");
  84. /* 准备SQL语句 */
  85. OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);
  86. /* 绑定输入列 */
  87. OCIBindByName (stmthp, &bidhp[0], errhp, ":sex", 4, szsex, sizeof(szsex), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);
  88. OCIBindByName (stmthp, &bidhp[1], errhp, ":name", 5, szname, sizeof(szname), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);
  89. OCIBindByName (stmthp, &bidhp[2], errhp, ":email", 6, szemail, sizeof(szemail), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);
  90. OCIBindByName (stmthp, &bidhp[3], errhp, ":phone", 6, szphone, sizeof(szphone), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);
  91. /* 设置输入参数 */
  92. memset(szsex, 0, sizeof(szsex));
  93. strcpy(szsex, "M");
  94. memset(szname, 0, sizeof(szname));
  95. strcpy(szname, "张三");
  96. memset(szemail, 0, sizeof(szemail));
  97. strcpy(szemail, "zhangsan@dameng.com");
  98. memset(szphone, 0, sizeof(szphone));
  99. strcpy(szphone, "027-87588000");
  100. /* 执行SQL语句 */
  101. OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT);
  102. /* 提交到数据库 */
  103. OCITransCommit(svchp, errhp, OCI_DEFAULT);
  104. /************************************************************************/
  105. /* 更新person表 */
  106. /************************************************************************/
  107. memset(sql, 0, sizeof(sql));
  108. strcpy(sql, "update person.person set sex='M',name='Liuhuan',email='liujian@mail',phone='13636396811' WHERE personid=1");
  109. /* 准备SQL语句 */
  110. OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);
  111. /* 执行SQL语句 */
  112. OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT);
  113. /* 提交到数据库 */
  114. OCITransCommit(svchp, errhp, OCI_DEFAULT);
  115. /************************************************************************/
  116. /* 删除person表的ID为的数据,首先要在数据库中存在这条记录 */
  117. /************************************************************************/
  118. memset(sql, 0, sizeof(sql));
  119. strcpy(sql, "delete from person.person WHERE personid=?");
  120. /* 准备SQL语句 */
  121. OCIStmtPrepare(stmthp, errhp,(text *)sql, strlen(sql),OCI_NTV_SYNTAX, OCI_DEFAULT);
  122. /* 绑定输入参数 */
  123. memset(szpersonid, 0, sizeof(szpersonid));
  124. strcpy(szpersonid, "20");
  125. OCIBindByPos(stmthp, &bidhp[0], errhp, 1, szpersonid, sizeof(szpersonid), SQLT_AFC, NULL, NULL, NULL, 0, NULL, 0);
  126. /* 执行SQL语句 */
  127. OCIStmtExecute(svchp, stmthp, errhp, (ub4)0, (ub4) 0, (CONST OCISnapshot*) 0, (OCISnapshot*) 0, (ub4) OCI_DEFAULT);
  128. /* 提交到数据库 */
  129. OCITransCommit(svchp, errhp, OCI_DEFAULT);
  130. //结束会话
  131. OCISessionEnd(svchp, errhp, authp, (ub4) 0);
  132. //断开与数据库的连接
  133. OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
  134. //释放OCI句柄
  135. OCIHandleFree((dvoid*)dschp, OCI_HTYPE_DESCRIBE);
  136. OCIHandleFree((dvoid*)stmthp, OCI_HTYPE_STMT );
  137. OCIHandleFree((dvoid*)errhp, OCI_HTYPE_ERROR);
  138. OCIHandleFree((dvoid*)authp, OCI_HTYPE_SESSION );
  139. OCIHandleFree((dvoid*)svchp, OCI_HTYPE_SVCCTX);
  140. OCIHandleFree((dvoid*)srvhp, OCI_HTYPE_SERVER);
  141. //错误处理
  142. int errcode = 0;
  143. char errbuf[512] = {0};
  144. OCIErrorGet(errhp, 1, (OraText*)NULL, &errcode, (ub1*)errbuf, sizeof(errbuf), OCI_HTYPE_ERROR);
  145. return 0;
  146. }
  147. # gcc dmdci.c -ldmoci -L.

达梦DCI的更多相关文章

  1. 达梦7的试用 与SQLSERVER的简单技术对比

    达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...

  2. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作

    由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到.由于我的Winform开发框架,是基于 ...

  3. NeoKylin5.6下安装部署达梦(DM7)数据库

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 [root@jdbh ~]# uname -ra Linux jdbh -.el5xen # SMP Fri Jul :: EDT x ...

  4. 国产达梦数据库的结合Enterprise Library的应用开发

    在上篇<基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作>介绍了如何在Enterprise Library的数据访问层上支持这种神秘的国产数 ...

  5. Rocky4.2下安装达梦(DM)6数据库

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 jdbh:~ # uname -ra Linux jdbh -x86_64 # SMP Fri Dec :: CST x86_64 G ...

  6. 全文检索- Oracle/MySql/达梦

    简单使用语法: MySql: ALTER TABLE dataset_ods ENGINE = MyISAM; //5.6后的InnoDB支持全文索引 ALTER TABLE dataset_ods ...

  7. DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库

    DB 查询分析器 6.03 如何灵活.快捷地操作国产达梦数据库 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要       本文详细地介绍了"万能数据库查询分析器&qu ...

  8. DBeaver连接达梦数据库

    1.连接类型选择ODBC. 2.编辑驱动设置: 1)Class Name:dm.jdbc.driver.DmDriver 2)URL Template:jdbc:dm://{dbserver}/{da ...

  9. 达梦数据库DM7小结

    除了很多主流的数据库,我们很熟悉之外,越来越多的国产数据库也涌现出来. 这次就小结一些有关武汉的达梦数据库7这个开发版数据库的有别或者需要注意的地方进行一个简单备注吧. 1.第一件大事就是下载.数据库 ...

随机推荐

  1. HTML与CSS学习笔记(1)

    1.web三大核心技术? HTML CSS JavaScript 2.HTML基本机构和属性 HTML:超文本 标记 语言 超文本:文本内容+非文本内容(图片.视频.音频等) 标记:<单词> ...

  2. 点云深度学习的3D场景理解

    转载请注明本文链接: https://www.cnblogs.com/Libo-Master/p/9759130.html PointNet: Deep Learning on Point Sets ...

  3. 各大开源rpc 框架 比较

    各大开源rpc 框架 比较   1. 前言 随着现在互联网行业的发展,越来越多的框架.中间件.容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的问题.然而面对众多的技术选择,我们要如何甄别出 ...

  4. reactjs中配置代理跨域

    第一步,下载依赖 http-proxy-middleware yarn add http-proxy-middleware 第二步,在src下建立setupProxy.js const proxy = ...

  5. ASP.NET CoreMVC 中的控制器

    Controller in ASP.NET Core MVC 在本节中,我们将讨论 Controller 是什么以及它在 ASP.NET Core MVC 中的作用. Fiddler 需要大家提前装一 ...

  6. P3613 【深基15.例2】寄包柜

    传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题 ...

  7. java 随笔

    Spring的scope="prototype"属性 - 多例 spring 默认scope 是单例模式(singleton),这样只会创建一个Action对象,每次访问都是同一个 ...

  8. MySQL实战45讲学习笔记:第十七讲

    一 .引子 我在上一篇文章,为你讲解完 order by 语句的几种执行模式后,就想到了之前一个做英语学习 App 的朋友碰到过的一个性能问题.今天这篇文章,我就从这个性能问题说起,和你说说 MySQ ...

  9. 守护进程--Supervisor

    01,介绍 02,安装部署 yum install python-setuptoolseasy_install supervisor 03,使用说明 supervisor安装成功之后,没有提供默认的配 ...

  10. [BZOJ1852] [MexicoOI06]最长不下降序列

    [BZOJ1852] [MexicoOI06]最长不下降序列 额我也不知道是不是水过去的...和网上的另一篇题解对拍过了,但是拍不出来... 经过和神仙的讨论基本可以确定是对的了 考虑如下贪心 (我将 ...