摘 要 文章介紹了在VC++ 6.0 中使用嵌入式SQL語言訪問Microsoft SQL Server 2000數(shù)據(jù)庫的編程實現(xiàn)方法。
關(guān)鍵詞 嵌入式SQL 預(yù)編譯程序 動態(tài)連接庫
中圖分類號:TP312 文獻標(biāo)識碼:A
0 引言
在通常的運用中,SQL語言是作為獨立語言在終端交互方式下使用的,是非過程性的,其大多數(shù)語句都是獨立執(zhí)行,與上下文無關(guān),稱作自含式語言;而許多事務(wù)處理應(yīng)用都是過程性的,需要根據(jù)不同的條件來執(zhí)行不同的任務(wù),如果把SQL語言嵌入到諸如C語言這樣的過程化的編程語言中,程序開發(fā)人員就能設(shè)計出更加靈活的應(yīng)用系統(tǒng),具有SQL語言和高級編程語言的良好特征,它將比單獨使用SQL或C語言具有更強的功能和靈活性,這種方式下使用的SQL語言稱為嵌入式SQL語言。
在計算機專業(yè)課程《數(shù)據(jù)庫系統(tǒng)概論》中有關(guān)于嵌入式SQL語言的內(nèi)容,其教學(xué)手段一般都是理論講述,教學(xué)效果不是十分理想。下面介紹一種在現(xiàn)有條件下都能辦到的嵌入式SQL語言實現(xiàn)方法。
1 在VC中使用嵌入式SQL語言訪問Microsoft SQL Server 2000
1.1 使用嵌入式SQL語言所采用的系統(tǒng)配置
①操作系統(tǒng):Windows 2000 Professional
②Microsoft Visual C++ 6.0
③Microsoft SQL Server 2000
在安裝Microsoft SQL Server 2000 時要注意選擇安裝Development Tools,為使用嵌入式SQL語言準(zhǔn)備必要的頭文件和庫文件。
1.2 編輯嵌入式SQL程序
使用文本編輯器如記事本編輯嵌入式SQL程序,其存盤文件的擴展名為\"sqc\"。在嵌入式SQL程序中嵌入的SQL語句以EXEC SQL作為起始標(biāo)識,語句的結(jié)束以\";\"作為標(biāo)識。在嵌入的SQL語句中可以使用C語言的程序變量(即主變量),這時主變量名前加冒號(:)作為標(biāo)志,以區(qū)別于字段名。主變量的聲明必須包含在\"EXEC SQL BEGIN DECLARE SECTION; \"和\"EXEC SQL END DECLARE SECTION; \"之間。以下是一個嵌入式SQL程序demo.sqc:
#include
void main()
{
EXEC SQL BEGIN DECLARE SECTION;
char first_name[50];
char last_name[] = \"White\";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO my_server.pubs
USER my_login.my_password;
EXEC SQL SELECT au_fname INTO :first_name
FROM authors WHERE au_lname = :last_name;
EXEC SQL DISCONNECT ALL;
printf(\"first_name: %s\n\", first_name);
}
此C語言程序中嵌入了SQL語句,用來訪問數(shù)據(jù)庫服務(wù)器my_server中的數(shù)據(jù)庫pubs,登錄名my_login,口令my_password,在表authors中檢索姓\"White\"的作者的名,并存入主變量first_name,然后通過printf函數(shù)輸出結(jié)果。
1.3 預(yù)編譯嵌入式SQL程序
Microsoft SQL Server 2000提供的預(yù)編譯程序nsqlprep.exe,用于對嵌入式SQL程序進行預(yù)編譯處理,生成C語言源程序。實際上就是將嵌入式SQL程序中的嵌入式SQL語句替換為對運行時庫文件Sqlakw32.dll的函數(shù)調(diào)用,接著運行時庫文件調(diào)用動態(tài)連接庫Ntwdblib.dll通過網(wǎng)絡(luò)來存取Microsoft SQL Server 2000數(shù)據(jù)庫服務(wù)器。
預(yù)編譯程序nsqlprep的常用語法為:
nsqlprep ESQL_File /SQLACCESS /DB server_name.database_name /PASS login.password
其中ESQL_File是要預(yù)編譯的嵌入式SQL程序;/SQLACCESS通知nsqlprep 自動地為嵌入式SQL程序中的靜態(tài)SQL語句創(chuàng)建相應(yīng)的存儲過程;/DB server_name.database_name指明要連接的服務(wù)器以及數(shù)據(jù)庫名稱;/PASS login.password給出登錄名及相應(yīng)的口令。對于demo.sqc的預(yù)編譯命令為:
nsqlprep demo /SQLACCESS /DB my_server.pubs /PASS my_login.my_password
經(jīng)預(yù)編譯處理后即可產(chǎn)生C語言源程序demo.c
1.4 配置VC++ 6.0 中的Project Settings
為了編譯、連接nsqlprep生成的C語言源程序,需要增加必要的訪問路徑到VC++ 6.0 的環(huán)境設(shè)置中:
①選擇菜單Tools中的菜單項Options
②選擇Directories標(biāo)簽頁
③在\"Show directories for\"下拉框中選擇\"Include files\",增加Microsoft SQL Server 2000 開發(fā)所需頭文件的路徑:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Include
④在\"Show directories for\"下拉框中選擇\"Library files\",增加Microsoft SQL Server 2000 開發(fā)所需庫文件的路徑:C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\LIB
1.5 生成訪問Microsoft SQL Server 2000數(shù)據(jù)庫的可執(zhí)行程序
在VC++ 6.0 中創(chuàng)建一個\"WIN32 Console Application\"類型的Project,選擇菜單Project中菜單項Add to Project的子項Files,將第三步中生成的C語言源程序demo.c添加到此Project中,然后編譯、連接即可生成訪問Microsoft SQL Server 2000數(shù)據(jù)庫的可執(zhí)行程序:demo.exe,運行的輸出結(jié)果為:Johnson;這與使用交互式查詢工具Query Analyzer檢索的結(jié)果是一致的。至此,一個在VC++ 6.0中使用嵌入式SQL語言訪問Microsoft SQL Server 2000數(shù)據(jù)庫的應(yīng)用已經(jīng)開發(fā)完成。
2 結(jié)束語
本文探討了Microsoft SQL Server 2000中的ESQL/C編程,并介紹了在常用編程軟件VC++ 6.0 中嵌入式SQL程序設(shè)計的實現(xiàn)方法。在嵌入式SQL語言的課堂教學(xué)中,使用該方法,獲得了良好的教學(xué)效果。