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