嵌入SQL
為了更好的理解嵌入SQL,本節(jié)利用一個具體例子來說明。嵌入SQL允許程序連接數(shù)據(jù)庫并且包括SQL代碼到程序中,這樣在程序中可以對數(shù)據(jù)庫進行使用、操作以及處理數(shù)據(jù)等等。以下是用C語言編寫的使用嵌入SQL的例程,它將打印一個報告;這個程序必須在普通的編譯之前先預編譯SQL語句。嵌入SQL對于不同系統(tǒng)是不一樣的,所以在不同的系統(tǒng)中對以下的程序稍作修改,特別是變量的聲明以及過程記錄等。在嵌入SQL時,考慮網(wǎng)絡(luò)、數(shù)據(jù)庫管理系統(tǒng)、操作系統(tǒng)是相當重要的。
以下是詳細的代碼:
#include
/*以下這部分是聲明主機變量,它將使用于程序中*/
EXECSQLBEGINDECLARESECTION;
intBuyerID;
charFirstName[100],LastName[100],Item[100];
EXECSQLENDDECLARESECTION;
/*以下包括SQLCA變量,它可以用來進行錯誤檢查*/
EXECSQLINCLUDESQLCA;
main(){
/*以下連接數(shù)據(jù)庫*/
EXECSQLCONNECTUserID/Password;
/*以下是連接數(shù)據(jù)庫并檢查是否有錯誤產(chǎn)生T*/if(sqlca.sqlcode){
printf(Printer,"Errorconnectingtodatabaseserver.\n");
exit();
}
printf("Connectedtodatabaseserver.\n");
/*下面聲明一個"Cursor"。它將在查詢結(jié)果多于一行的時候使用*/
EXECSQLDECLAREItemCursorCURSORFOR
SELECTITEM,BUYERID
FROMANTIQUES
ORDERBYITEM;
EXECSQLOPENItemCursor;
/*你可以在這里還可以加入另外一些錯誤檢查的內(nèi)容,這里省略了*/
/*當這個CURSOR沒有數(shù)據(jù),sqlcode將被產(chǎn)生以允許我們退出循環(huán)。這里注意,為了簡單起見,我們使程序遇到錯誤的時候退出任何的sqlcode。*/
EXECSQLFETCHItemCursorINTO:Item,:BuyerID;
while(!sqlca.sqlcode){
EXECSQLUPDATEANTIQUES
SETPRICE=PRICE+5
WHEREITEM=:ItemANDBUYERID=:BuyerID;
EXECSQLSELECTOWNERFIRSTNAME,OWNERLASTNAME
INTO:FirstName,:LastName
FROMANTIQUEOWNERS
WHEREBUYERID=:BuyerID;
printf("%25s%25s%25s",FirstName,LastName,Item);
EXECSQLFETCHItemCursorINTO:Item,:BuyerID;
}
/*關(guān)閉CURSOR,提交變化并退出程序。*/
EXECSQLCLOSEDataCursor;
EXECSQLCOMMITRELEASE;
exit();
}(編輯:dabaoku)