天天看點

C語言中嵌入式SQL語句

<a href="http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx%E5%8E%9F%E6%96%87%E5%9C%B0%E5%9D%80">http://blog.csdn.net/cnlht/archive/2007/12/12/1930960.aspx原文位址</a>

實驗内容:

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

實驗步驟:

一、資料庫環境配置

1、建立xuesheng資料庫,建立student表等;

2、關閉sql server 2000服務管理器;

3、将devtools檔案夾拷貝到:C:\Program Files\Microsoft SQL Server

4、将Binn檔案夾拷貝到:C:\Program Files\Microsoft SQL Server\MSSQL

5、啟動伺服器;

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

1.工具—&gt;選擇—&gt;目錄—&gt;Include Files

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

并設為第一項

2.選擇Library Files

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

三、寫程式,預編譯,最後在VC++中編譯、執行

1、編輯EXEC.sqc檔案,儲存到:C:\Program Files\Microsoft SQL Server\MSSQL\Binn目錄

EXEC.sqc檔案如下:

#include &lt;stdio.h&gt;

#include &lt;stdlib.h&gt;

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-&gt;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",&amp;yn);

}

while(yn != 'N' &amp;&amp; yn != 'n' &amp;&amp; yn != 'Y' &amp;&amp; yn != 'y');

if (yn == 'y' || yn == 'Y')                 /*如果選擇更新操作*/

   printf("INPUT NEW AGE:");

   scanf("%d",&amp;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;                  /*斷開資料庫連接配接*/

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

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

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

成功編譯完成結果:

見附件1

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

4、添加庫檔案:工程—&gt;設定—&gt;Link—&gt;對象/庫子產品

輸入SQLakw32.lib Caw32.lib兩個檔案名。附件3

注意,兩個檔案之間用空格分開。

5、将動态連結庫SQLakw32.dll,sqlaiw32.dll檔案拷貝到作業系統目錄下的子目錄C:\WINDOWS\system32中

6、連接配接:附件4

7、執行:附件5

附件1:

C語言中嵌入式SQL語句
C語言中嵌入式SQL語句