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. 201871010110-李华《面向对象程序设计(java)》第十五周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  2. 神兽、佛祖保佑,代码全程无bug

    ''' ━━━━━━神兽出没━━━━━━ ┏┓ ┏┓ ┏┛┻━━━━━┛┻┓ ┃ ┃ ┃ ━ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┃ ┃ ┻ ┃ ┃ ┃ ┗━┓ ┏━┛ Code is far away fr ...

  3. zzPony.ai 的基础架构挑战与实践

    本次分享将从以下几个方面介绍: Pony.ai 基础架构做什么 车载系统 仿真平台 数据基础架构 其他基础架构 1. Pony.ai 基础架构 首先给大家介绍一下 Pony.ai 的基础架构团队做什么 ...

  4. ios、安卓的兼容性

    日期转换成时间戳: 安卓下可以使用 Date.parse(new Date('2019-11-18 12:00:00')) 直接转换,结果为 1574049600000 ios下 Date.parse ...

  5. Magisk —— 安卓新一代的第三方拓展,systemless模式

    Magisk由宝岛台湾学生 topjohnwu 开发, XDA主贴:https://forum.xda-developers.com/apps/magisk 使用方法:第三方rec刷入zip 介绍: ...

  6. 性感VSCODE在线刷LeetCode的题

    安装Nodejs并勾选添加到PATH VSCODE安装插件LeetCode 注册LeetCode账号(注意CN国区和国际区账号不通用),重启VSCODE并点左边栏那个LeetCode图标sign in ...

  7. git diff比较版本差异(生成补丁)

    1.git diff [<options>] <commit> <commit> options 使用--name-only(git diff HEAD cd504 ...

  8. HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .

    window.close(); System.Diagnostics.Process[]   myProcesses;     myProcesses   =   System.Diagnostics ...

  9. 记录webservice

    公司的一个老项目,定义了接口,供其他应用访问.定义的方式就是webservice. 我这边的环境是springboot. 首先引入依赖jar 声明一个服务端. @WebSerevice注解中name则 ...

  10. 34,Leetcode 组合总和I,II -C++ 回溯法

    I 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无 ...