前段时间编译ESQL/C程序都是在Linux平台下编译,回家没编译环境,只好尝试windows下的编译。
数据库:Sybase Adaptive Server Enterprise 12.5 (ASE12.5)
开发工具:vc6.0
Sybase安装目录为E:\sybase
设置环境变量:include、lib
include=%include%;E:\sybase\OCS-12_5\include
lib=%lib%;E:\sybase\OCS-12_5\lib
(右键单击“我的电脑”,选择“属性”菜单项,再选择“高级”选项卡,点击“环境变量”)
数据库实例名:WEIHB
数据库名:mydb
表名:employee
Create table employee
(
emp_id varchar(10) not null primary key,
emp_name varchar(20) not null,
emp_sex char(1),
emp_birth date,
emp_hobby varchar(100)
)
数据库中的数据如下:
编写代码,文件C:\sybsimp.ec
通过输入的emp_id信息,查询emp_name字段信息并显示。
#include<stdio.h>
#include<string.h>
#define SQL_SUCCESS 0
#define DATA_NOT_FOUND 100
EXEC SQL INCLUDE sqlca;
int main(int argc, char *argv[])
{
EXEC SQL BEGIN DECLARE SECTION;
char szServer[20 + 1];
char szUser[20 + 1];
char szPwd[20 + 1];
char szDb[20 + 1];
char szEmpId[20 + 1];
char szEmpName[20 + 1];
EXEC SQL END DECLARE SECTION;
strcpy(szServer, "WEIHB");
strcpy(szUser, "sa");
strcpy(szPwd, "");
strcpy(szDb, "mydb");
printf("Please enter employee id:");
gets(szEmpId);
EXEC SQL CONNECT :szUser IDENTIFIED BY :szPwd using :szServer;
if(sqlca.sqlcode != SQL_SUCCESS)
{
printf("An error occured!%s,%d,error id:%d\t msg:%s\n",\
__FILE__, __LINE__, sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);\
getch();
exit(1);
}
EXEC SQL USE :szDb;
EXEC SQL
SELECT
emp_name into :szEmpName
FROM
employee
WHERE emp_id=:szEmpId;
if(sqlca.sqlcode == DATA_NOT_FOUND)
{
fprintf(stderr, "data not found\n");
EXEC SQL DISCONNECT CUREENT;
getch();
exit(1);
}
printf("emp_name:%s\n", szEmpName);
EXEC SQL DISCONNECT CURRENT;
getch();
return 0;
}
将E:\sybase\OCS-12_5\include目录下的sybesql.c文件拷贝到C:\下。
打开“命令提示符”并切换到C:\
预编译操作,执行:
cpre sybsimp.ec
生成可执行文件:
cl sybsimp.c sybesql.c /link libct.lib libcs.lib
注:
cl是vc6.0提供的C/C++编译器,/link选项后的参数是传递给连接器link.exe的,此处用到了sybase的链接库,所以需要指定。
在预编译时产生3个警告,是因为没有添加三个回调函数,可以不用去理会它。
可执行文件名为sybsimp.exe,执行该文件显示如下: