Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在Windows下用gcc编译器实现DB2嵌入SQL编程

Posted on 2008-09-09 18:19 Prayer 阅读(655) 评论(0)  编辑 收藏 引用 所属分类: C/C++DB2
Windows下使用C语言+嵌入SQL实现DB2开发
  Cygwin,gcc的介绍和安装在前面的文章有将过,请参考

  在Windows中使用Cygwin环境下的gcc编译器编译Informix ESQ/C程序

  对于DB2的嵌入SQL程序,有以下步骤:
  1)编写dbconn.sqc程序(一个简单的连接数据库,查询并显示的例子)

  2)在Cygwin命令行中键入 db2cmd 启动一个新的db2命令行窗口

  在db2命令行窗口中:
  3)预编译
  db2 prep dbconn.sqc
  生成dbconn.c文件
  4)编译
  gcc -I"C:\Program Files\IBM\SQLLIB\include" dbconn.c "C:\Program Files\IBM\SQLLIB\lib\db2api.lib"
  生成a.exe文件
  在<在Windows中使用Cygwin环境下的gcc编译器编译Informix ESQ/C程序>文章中提到在使用gcc编译时如果路径中包含空格的路径,就不能正确解析。
  这次发现可以将路径用双引号引起来就可以了。
  5)执行a.exe,成功

  如果需要生成外部绑定文件,(db2执行预编译时默认是做绑定了)
  1)db2 prep dbconn.sqc bindfile
  生成
  dbconn.c, dbconn.bnd
  2)手工绑定
  db2 bind dbconn.bnd
  3)绑定完后一定要重新编译,否则报-818,
  db2 ? SQL0818
  预编译时由预编译器生成的时间戳记与绑定时存在的包内的时间戳记不同

  附录1
  dbconn.sqc程序
  #include <stdio.h>
  #include <string.h>
  #include <sql.h>

  int main()
  {
      EXEC SQL INCLUDE SQLCA;

      EXEC SQL BEGIN DECLARE SECTION;
          char firstnme[12+1];
      EXEC SQL END DECLARE SECTION;

      long RetCode = SQL_RC_OK;
      char ErrorMsg[1024];

      EXEC SQL CONNECT TO sample USER zhangjij USING happyday;

      EXEC SQL SELECT firstnme INTO :firstnme FROM employee WHERE empno='000099'; 
      if (sqlca.sqlcode != SQL_RC_OK)
      {
          RetCode = sqlaintp(ErrorMsg, sizeof(ErrorMsg), 70, &sqlca);

          switch (RetCode)
          {
          case -1:
              printf("ERROR: Insufficient memory. ");
              break;
          case -3:
              printf("ERROR: Message file is inaccessible. ");
              break;
          case -5:
              printf("ERROR: Invalid SQLCA, bad buffer, or bad buffer length specified. ");
              break;
          default:
              printf("sqlca.sqlcode=[%ld], Message= [%s] ", sqlca.sqlcode, ErrorMsg);
              break;
          }
      }

      printf("OK = [%s] ", firstnme);
     
      EXEC SQL DISCONNECT CURRENT;

      return(0);
  }


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理