C語言中嵌入式SQL語句

原文: 【轉載】C語言中嵌入式SQL語句

http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文地址 html

實驗內容: c++

掌握SQL Server 2000的預編譯程序NSQLPREP.EXE的使用(以課本例題1進行調試); sql

實驗步驟: 數據庫

1、數據庫環境配置 服務器

一、建立xuesheng數據庫,創建student表等; 編輯器

二、關閉sql server 2000服務管理器; 工具

三、將devtools文件夾拷貝到:C:\Program Files\Microsoft SQL Server post

四、將Binn文件夾拷貝到:C:\Program Files\Microsoft SQL Server\MSSQL url

五、啓動服務器; 操作系統

2、VC++6.0編輯器配置(初始化Vc++環境)

1.工具—>選擇—>目錄—>Include Files

添加: C:\Program Files\Microsoft SQL Server\devtools\include

並設爲第一項

2.選擇Library Files

添加:C:\Program Files\Microsoft SQL Server\devtools\x86lib

並設爲第一項

3、寫程序,預編譯,最後在VC++中編譯、執行

一、編輯EXEC.sqc文件,保存到:C:\Program Files\Microsoft SQL Server\MSSQL\Binn目錄

EXEC.sqc文件以下:

#include <stdio.h>
#include <stdlib.h>


EXEC SQL BEGIN DECLARE SECTION; /*主變量說明開始*/
char deptname[64];
char HSno[64];
char HSname[64];
char HSsex[64];
int HSage;
int NEWAGE;
long SQLCODE;
EXEC SQL END DECLARE SECTION;     /*主變量說明結束*/

EXEC SQL INCLUDE sqlca;               /*定義SQL通訊區*/

/*************************************************************************/

int main(void)                           /*C語言主程序開始*/
{
int count = 0;
char yn;                              /*變量yn表明yes或no*/
printf("Please choose the department name(CS/MA/IS): ");
scanf("%s", deptname);                 /*爲主變量deptname賦值*/
EXEC SQL CONNECT TO HP-08D6CXF128B\SQL2000 USER sa;         /*鏈接數據庫TEST*/
EXEC SQL DECLARE SX CURSOR FOR   /*定義遊標*/
SELECT Sno, Sname, Ssex, Sage   /*SX對應語句的執行結果*/
FROM 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 %-10d\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:");
   scanf("%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;                  /*斷開數據庫鏈接*/
}

二、使用MS-DOS進行預編譯:

1)進到Binn文件下:cd C:\Program Files\Microsoft SQL Server\MSSQL\Binn

2)調用預編譯程序nsqlprep.exe程序:nsqlprep EXEC

成功編譯完成結果:

見附件1

三、使用Vc++進行編譯,見附件2

四、添加庫文件:工程—>設置—>Link—>對象/庫模塊
輸入SQLakw32.lib Caw32.lib兩個文件名。附件3
注意,兩個文件之間用空格分開。
五、將動態連接庫SQLakw32.dll,sqlaiw32.dll文件拷貝到操做系統目錄下的子目錄C:\WINDOWS\system32中

六、鏈接:附件4

七、執行:附件5

附件1:

6c0f946an97bf850e4643&6906c0f946an97bf85b0bacf&690   

 

 

 

 

6c0f946an97bf85b3a1ff&6906c0f946an759326ec9d2f&690

相關文章
相關標籤/搜索