当前位置:文档之家› 数据库 实验报告5 ESQL

数据库 实验报告5 ESQL

如果没有进行区分,则会报错。 2. 预编译时,在定义主变量部分报错。如:ERROR: Syntax error at or near “char”。
答:这是因为在定义主变量时,varchar 型和 char 型变量的长度定义必须使用方括号而 不是原来用的圆括号,例如 deptname[20]不能定义为 deptname(20),改为方括号后即可顺利 通过。 3. 在连接数据库时,EXEC SQL CONNECT TO dbname@hostname:port [USER user-name]; 如果写成 EXEC SQL CONNECT TO 学生课程数据库@localhost:54321 “system”/”manager”; 出错。
char HSsex[2];
int
HSage;
int
NEWAGE;
EXEC SQL END DECLARE SECTION;
/*声明部分结束*/
long SQLCODE;
EXEC SQL INCLUDE sqlca;
/*定义 SQL 通信区*/
int main(void)
{
int
count = 0;
printf("UPDATE AGE(y/n)?");
do
{
scanf("%c",&yn);
}while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');
if(yn == 'y' || yn == 'Y')
/*如果选择修改的操作。*/
{
printf("INPUT NEW AGE:");
行编译了。本实验直接使用命令行的方式对该 C 程序进行编译和链接。 (1)编译。 在编译过程中需要使用到 cl.exe 程序,cl.exe 是 Visual C++ 的编译器名称。如果安装
Visual C++在 C:\Program Files\Microsoft Visual Studio\VC98 下,则其编译器 cl.exe 所在路径 应该是 C:\Program Files\Microsoft Visual Studio\VC98\Bin。在 cl 后面可以加上各类参数命令, 进行不同的操作。本实验中使用到的“/c”命令是表示只编译,不链接,相当于在 Visual C++ 6.0 中,选择"Build"菜单下的"Compile"。编译命令如下:
二.编写含嵌入式 C 程序 test,扩展名为.pc。 EXEC SQL BEGIN DECLARE SECTION;
/*说明主变量 deptname,HSno,HSname,
char deptname[20];
*HSsex,HSage,NEWAGE。*/
char HSno[9];
char HSname[20];
《数据库系统概论》实验报告
题目:实验五 通过嵌入式 SQL 访问数据库 姓名 Vivian 日期 2006-1-1
实验内容:
编写嵌入式 C 程序,编程实现了对“学生课程数据库”的访问和操作:对 Student 表中 的年龄进行更新。系统每输出一个学生记录,询问用户是否更新。如果要更新,就输入新的 年龄。 一. 实验环境介绍。
/*其中参数 0 代表 SUCCESS*/ /*如果是第一行的话,先打出行头*/
printf("\n%-10s %-20s %-10s %-10s\n", "Sno", "Sname", "Ssex", "Sage");
printf("%-10s %-20s %-10s %-10d\n", HSno, HSname, HSsex, HSage);
char yn;
/*变量 yn 代表 yes 或者 no*/
printf("Please choose the department name(CS/MA/IS): "); /*为主变量 deptname 赋值*/
scanf("%s", &deptname);
EXEC SQL CONNECT TO 学生课程数据库@localhost:54321 USER
实验五是在之前完成的实验一的基础上进行的。 系统配置为:CPU: P3 800 内存:512MB 硬盘:30G
软件系统:WINDOWS 2000 ADVANCED SERVER。 在实验一中,我们已经成功安装了 KingbaseES V4.1,形成本实验所需要的环境。其中 安装路径为 C:\Program Files 目录下。
/*关闭游标。*/
EXEC SQL COMMIT WORK;
/*提交更新。*/
EXEC SQL DISCONNECT 学生课程数据库; /*断开连接。*/
}
三.对 C 程序进行处理,生成可执行文件。 本实验是在 windows 环境下对 C 程序进行预编译和编译、链接的。没有给出 Linux 环
境下的编译过程,读者如果有兴趣,可以自行实验。 1. 预编译。
scanf("%d",&NEWAGE);
/*用户输入新年龄,存放在主变量
EXEC SQL UPDATE Student
*NEWAGE 中。*/
SET Sage = :NEWAGE
WHERE CURRENT OF SX; /*对 Student 表中的年龄进行更新。*/
}
Hale Waihona Puke } EXEC SQL CLOSE SX;
cl /c /DWIN32 /I"C:\Program Files\Basesoft\KingbaseES\4.1\include" /Fotest.obj test.c (2)链接。 由于在编译时我们选用“/c”命令只对 test.c 进行了编译并没有进行链接,而该 C 程序执 行需要链接 esql.lib 函数库,所以在链接时我们需要指定这个库文件的路径。链接命令如下: link /out:test.exe test "C:\Program Files\Basesoft\KingbaseES\4.1\lib\esql.lib" 最后生成可执行文件 test.exe,即可实现具体功能。
/*打开游标。*/ /*用循环结构逐条处理结果集的记录*/
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage; /*游标向前推进一行,取结果送主变量*/
if (sqlca.sqlcode != 0)
break; if(count++ == 0)
本实验中,test.pc 存放在 C:\Program Files\Basesoft\KingbaseES\4.1\bin 目录下,与预处 理程序 esqlc 存放在同一目录下,这样做的目的是便于之后的三步处理过程,不需要特别指 定存放路径。如果存放在其他目录下,只需要在文件名前指定完整路径即可。
(1)“开始”—〉“运行”,输入 cmd 命令,进入命令行编辑器。 (2)命令行编辑器默认的路径为 C:\Documents and Settings\[用户名]>,我们首先需要 转到预处理程序 esqlc 所在的目录下。键入: cd C:\Program Files\Basesoft\KingbaseES\4.1\bin。 (3)进行预编译。
esqlc -I "C:\Program Files\Basesoft\KingbaseES\4.1\include" -o test.c test.pc (4)如果预编译成功,则自动生成一个.c 文件。结果提示可能会有一个“WARNING: EXEC SQL SQLCA: SQL language extension”,但对结果不造成影响。 2. 编译和链接。 经过预处理之后,生成了标准的 C 语言程序 test.c,就可以使用标准的 C 语言编译器进
答:在语法说明中连接数据库给出了三种指定用户名和口令的方式。但是在前面一定要 加上 USER 才是正确的,很容易忽略 USER 这个关键字造成预编译无法通过。
遇到的问题和解决方案:
1. 在进行预编译时,键入命令 esqlc -i "C:\Program Files\Basesoft\KingbaseES\4.1\include" -o test.c test.pc 出错。 答:这是由于大小写没有注意区分的原因。-I 的语法要求使用大写,而-o 是使用小写。
"SYSTEM"/"MANAGER";
/*连接数据库 TEST*/
EXEC SQL DECLARE SX CURSOR FOR /*说明游标,为查询和更新做准备*/
SELECT Sno, Sname, Ssex, Sage
FROM Student
WHERE SDept = :deptname;
EXEC SQL OPEN SX; for ( ; ; ) {
相关主题