WEB开发网
开发学院数据库DB2 在Windows环境下使用Cygwin中的gcc编译器实现DB2的... 阅读

在Windows环境下使用Cygwin中的gcc编译器实现DB2的嵌入SQL编程

 2006-04-09 22:06:45 来源:WEB开发网   
核心提示:Windows下使用C语言+嵌入SQL实现DB2开发Cygwin,gcc的介绍和安装在前面的文章有将过,请参考在Windows中使用Cygwin环境下的gcc编译器编译Informix ESQ/C程序对于DB2的嵌入SQL程序,在Windows环境下使用Cygwin中的gcc编译器实现DB2的嵌入SQL编程,有以下步骤

  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.\n");
            break;
        case -3:
            printf("ERROR: Message file is inaccessible.\n");
            break;
        case -5:
            printf("ERROR: Invalid SQLCA, bad buffer, or bad buffer length specified.\n");
            break;
        default:
            printf("sqlca.sqlcode=[%ld], Message= [%s] \n", sqlca.sqlcode, ErrorMsg);
            break;
        }
    }

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

    return(0);
}
   

Tags:Windows 环境 使用

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