數據庫應用編程(C語言嵌入式)

EXEC SQL BEGIN DECLARE SECTION;			//主變量說明開始
	char deptname[20];
	char hsno[9];
	char hsname[20];
	char hssex[2];
	int HSage;
	int NEWAGE;
EXEC SQL END DECLARE SECTION;			//主變量說明結束
long SOLCODE;
EXEC SQL INCLUDE SQLCODEE;				//定義SQL通信區
int main(void){
	int count = 0;
	char yn;							//變量yn代表yes或no
	printf("Please choose the department name(CS/MA/IS):");
	scanf("%s", &deptname);
	EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM"/"MANAGER";//連接數據庫
	EXEC SQL DECLARE SX CURSOR FOR //定義遊標SX
		SELECT Sno,Sname,Ssex,Sage;	   //SX對應的語句
		FORM Student
		WHERE SDept=:deptname;
	EXEC SQL OPEN SX; 					//打開遊標 SX,指向查詢結果的第一行
	for(;;){							//用循環結構逐條處理結果集中的記錄 
		EXEC SQL FETCH SX INTO :HSno,:HSname,:HSsex,:HSage;	//推進遊標,將當前數據放入主變量 
		if(SQLCA.SQLCODE != 0)			//SQLCODE != 0,表示操作不成功 
			break						//利用SQLCA中的狀態信息決定何時退出循環
		if(count++ == 0){				//如果是第一行的話,先打出行頭 
			printf("\n%-10s%-20s%-10s%-10s%\n", "Sno", "Sname", "Ssex", "Sage");
		} 
		printf("%-10s%-20s%-10s%-10s%\n", HSno, HSname, HSsex, HSage);	//結果
		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:");
			sncaf("%d", &NEWAGE);		//用戶輸入新年齡到主變量中 
			EXEC SQL UPDATE Student		//嵌入式SQL更新語句
				SET Sage=:NEWAGE
				WHERE CURRENT OF SX;	//對當前遊標指向的學生年齡進行更新 
		}
		EXEC SQL CLOSE SX;				//關閉遊標SX, 不再和查詢結果對應
		EXEC SQL COMMIT WORK;			//提交更新
		EXEC SQL DISCONNECT	TEST;		//斷開數據庫連接 
	} 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章