db2的sqc文件里怎么连接数据库

db2的sqc文件里怎么连接数据库,第1张

1.首先把自己编辑好的SQC文件(如:test.sqc)放在指定的目录下。

2.正式开始编译前,需要和DB2数据库(如:TESTDB)建立连接。

以linux环境为例,在命令行状态下,输入:db2

connect

to

TESTDB

3.调用DB2的prep命令对SQC文件进行预编译,用来生成C文件。

在命令行状态下,输入:db2

prep

test.sqc

BINDFILE

package

using

bindtest

说明:

上述命令中的“BINDFILE”是用来指定在做预编译的同时生成bind文件的(如:bindtest.bnd)

上述命令中的“package

using

bindtest”是用来指定将要写入到DB2的系统表中的package信息的名称(如:bindtest)。

bind文件里记载的是用来写入到package信息的数据。

4.调用DB2的bind

命令从上一步生成的bind文件中读出必要的数据写入到上一步指定名称的package信息中。

并可以给这条信息指定访问权限。

以linux环境为例,在命令行状态下,输入:db2

bind

ConnTEST.bnd

GRANT

PUBLIC

5.到目前为止可以说与DB2相关的所有预编译就基本完成了,我们需要的C文件(如:test.c)也整成生成了,那个bind文件后边暂时不会用到了。

下来就可以调用CC或GCC之类的C代码编译器对这个C文件进行编译,基本的过程是test.c→test.o→test。这样我们就可以执行这个最终的可实行程序了。

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文件

在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

#include

#include

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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11459499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存