本人初学者 遇到问题 请教解决 先谢谢了
问题是这样的
运行程序:输入1 2 3 4 5 6 7 8 9 a b c
再输入5 应该输出1 2 3 4 5 6的 可是得到的却是7 8 9 a b c
数据库检查了 确认连接没问题
每次输入的也都存在了(用查询分析器可以看见)
现在就应该是游标那块儿出问题了
求大牛帮帮忙
#include <stdio.h>
#include <string.h>
main()
{
int Recnum;
EXEC SQL INCLUDE SQLCA; //定义通信区
EXEC SQL BEGIN DECLARE SECTION;//主变量定义开始
char Msno[10];
char Msname[20];
char Mssex[10];
char Msage[10];
char Msdeptname[20];
char Maddress[30];
char deptname[20];
EXEC SQL END DECLARE SECTION;//主变量定义结束
EXEC SQL CONNECT to HYAS-D430C8E1BB.example USER test.1;//连接数据库GHOST-579463447
if (SQLCODE==0)
{
EXEC SQL CREATE TABLE Student //创建学生信息表
(sid CHAR(10),
sname CHAR(20),
sex CHAR(10),
age CHAR(10),
dept CHAR(20),
address CHAR(30));
Recnum=1;
while(Recnum <=2)
{
printf("学号:");scanf("%s",Msno);printf("\n");
printf("姓名:");scanf("%s",Msname);printf("\n");
printf("性别:");scanf("%s",Mssex);printf("\n");
printf("年龄:");scanf("%s",Msage);printf("\n");
printf("院系:");scanf("%s",Msdeptname);printf("\n");
printf("住址:");scanf("%s",Maddress);printf("\n");
//插入学生信息
EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES(:Msno,:Msname,:Mssex,:Msage,:Msdeptname,:Maddress);
Recnum++;
};
// EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES('a','b','c','d','e','f');
// EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES('aa','bb','cc','dd','ee','ff'); printf("输入完毕!\n"); printf("请输入查询院系名:");
scanf("%s",deptname);
printf("\n");
//定义游标
EXEC SQL DECLARE StuInfo CURSOR FOR
SELECT * FROM Student
WHERE dept=:deptname;
EXEC SQL OPEN StuInfo; //打开游标
while(1) //逐条处理结果记录
{
//从结果集中取当前行到主变量,并向前移动游标指针
EXEC SQL FETCH StuInfo
INTO :Msno,:Msname,:Mssex,Msage,:Msdeptname,:Maddress;
if(SQLCODE==0) break;
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n"); }; /* if(SQLCODE!=100) //若所有结果均已处理或出错,则退出循环
{
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n");}
else break;};*/
EXEC SQL CLOSE StuInfo; //关闭游标
EXEC SQL DISCONNECT example;
}
else printf("数据库或网络错误!");
return 1;
}
问题是这样的
运行程序:输入1 2 3 4 5 6 7 8 9 a b c
再输入5 应该输出1 2 3 4 5 6的 可是得到的却是7 8 9 a b c
数据库检查了 确认连接没问题
每次输入的也都存在了(用查询分析器可以看见)
现在就应该是游标那块儿出问题了
求大牛帮帮忙
#include <stdio.h>
#include <string.h>
main()
{
int Recnum;
EXEC SQL INCLUDE SQLCA; //定义通信区
EXEC SQL BEGIN DECLARE SECTION;//主变量定义开始
char Msno[10];
char Msname[20];
char Mssex[10];
char Msage[10];
char Msdeptname[20];
char Maddress[30];
char deptname[20];
EXEC SQL END DECLARE SECTION;//主变量定义结束
EXEC SQL CONNECT to HYAS-D430C8E1BB.example USER test.1;//连接数据库GHOST-579463447
if (SQLCODE==0)
{
EXEC SQL CREATE TABLE Student //创建学生信息表
(sid CHAR(10),
sname CHAR(20),
sex CHAR(10),
age CHAR(10),
dept CHAR(20),
address CHAR(30));
Recnum=1;
while(Recnum <=2)
{
printf("学号:");scanf("%s",Msno);printf("\n");
printf("姓名:");scanf("%s",Msname);printf("\n");
printf("性别:");scanf("%s",Mssex);printf("\n");
printf("年龄:");scanf("%s",Msage);printf("\n");
printf("院系:");scanf("%s",Msdeptname);printf("\n");
printf("住址:");scanf("%s",Maddress);printf("\n");
//插入学生信息
EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES(:Msno,:Msname,:Mssex,:Msage,:Msdeptname,:Maddress);
Recnum++;
};
// EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES('a','b','c','d','e','f');
// EXEC SQL INSERT INTO Student(sid,sname,sex,age,dept,address) VALUES('aa','bb','cc','dd','ee','ff'); printf("输入完毕!\n"); printf("请输入查询院系名:");
scanf("%s",deptname);
printf("\n");
//定义游标
EXEC SQL DECLARE StuInfo CURSOR FOR
SELECT * FROM Student
WHERE dept=:deptname;
EXEC SQL OPEN StuInfo; //打开游标
while(1) //逐条处理结果记录
{
//从结果集中取当前行到主变量,并向前移动游标指针
EXEC SQL FETCH StuInfo
INTO :Msno,:Msname,:Mssex,Msage,:Msdeptname,:Maddress;
if(SQLCODE==0) break;
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n"); }; /* if(SQLCODE!=100) //若所有结果均已处理或出错,则退出循环
{
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n");}
else break;};*/
EXEC SQL CLOSE StuInfo; //关闭游标
EXEC SQL DISCONNECT example;
}
else printf("数据库或网络错误!");
return 1;
}
EXEC SQL FETCH StuInfo
INTO :Msno,:Msname,:Mssex,Msage,:Msdeptname,:Maddress;
if(SQLCODE==0) break;
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n"); if(SQLCODE==0) break; 若使用这个方法判断 则会跳出循环 后面的printf都不会执行到
第二种:
if(SQLCODE!=100) //若所有结果均已处理或出错,则退出循环
{
printf("学号:%s\n",Msno);
printf("姓名:%s\n",Msname);
printf("性别:%s\n",Mssex);
printf("年龄:%s\n",Msage);
printf("院系:%s\n",Msdeptname);
printf("住址:%s\n",Maddress);
printf("done!\n");}
else break;};
若使用这个判断游标fetch完了没有 则if部分死循环
并且在if最后加break 不管输入什么deptname 游标部分输出的都是前面程序部分最后输入的一组数据
比如:输入1 2 3 4 5 6 7 8 9 a b c
再输入5 应该输出1 2 3 4 5 6的 可是得到的却是7 8 9 a b c