❶ 在windows下如何利用Cygwin進行編程
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);
}