本人初学者 遇到问题 请教解决 先谢谢了 
问题是这样的 
运行程序:输入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.   

    第一种:
    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