段班祥
(廣東科學技術職業學院計算機工程技術學院 廣東 珠海 519090)
長期以來,開發社區形成以下格局:面向對象與數據訪問兩個領域長期分裂,各自為政,編程語言中的數據類型與數據庫中的數據類型形成兩套體系。LINQ(Language Integrated Query)即語言集成查詢,是一組語言特性和API,使得你可以使用統一的方式編寫各種查詢。查詢的對象包括XML、對象集合、SQL Server數據庫等等。LINQ主要包含以下三部分:LINQ to Objects、LINQ to XML、LINQ to ADO.NET。而 LINQ to ADO.NET 主要包含:LINQ to SQL、LINQ to DataSet、LINQ to Entities。
三層結構主要分為:表示層、業務邏輯層和數據訪問層。表示層主要功能是為用戶提供一種交互式操作界面;業務邏輯層是表示層與數據訪問層之間的橋梁,負責關鍵業務的處理和數據傳遞;數據訪問層實現對數據的保存和讀取操作。其主要優點是當數據庫或用戶界面發生改變時不需要重新開發,只做簡單調整即可。
下面我們具體使用LINQ和三層結構實現學生信息管理系統,本系統開發工具使用Visual Studio 2010,開發語言使用C#,開發數據庫使用SQL Server 2008,系統開發的總體任務是實現信息關系的系統化、規范化和自動化。系統的結構關系如圖1所示:
系統的結構關系圖是系統的總體功能分析,是在系統開發的總體任務的基礎上完成的。本項目中的學生信息系統需要完成的功能主要有:有關學籍等信息的輸入,包括學生基本信息、所在班級、所學課程和成績等;學生信息的查詢,包括學生基本信息、所在班級、已學課程、所有成績和獎罰信息等;學生信息(包括獎罰信息)修改;班級管理信息的輸入,包括班級設置、年級信息和班級輔導員等;班級管理信息的查詢;班級管理信息的修改;學校基本課程信息的輸入;基本課程信息的修改;學生課程的設置和修改;學生成績信息的輸入;學生成績信息的修改;學生成績信息的查詢;學生成績的報表打印;用戶登錄信息的添加、修改和刪除等;用戶登錄的密碼修改;數據庫文件的備份。

圖1 系統結構關系圖
下面我們以“查詢所有學生的成績”模塊為例,說明如何具體使用LINQ和三層結構進行設計。LINQ提供了LINQ to DATASETS、LINQ to ENTITIES、LINQ to SQL等組件訪問數據源,且允許做所有與數據庫相關的操作。在學生信息管理系統中,主要使用LINQ to SQL組件訪問數據庫,但是其他各組件訪問數據源方法與其類似,可將其作為參考。
在數據訪問層把LINQ to SQL類增加到項目中,自動創建一個空白的設計器,與此同時,創建相關的dbml.layout文件和 designer.cs文件,并附有服務器資源管理器的鏈接。打開服務器資源管理器,建立與MySchool數據庫的鏈接,將所需要的表直接拖放到MySchool.dbml文件的視圖面板中,該文件的類與MySchool數據庫表相對應,最后保存dbml文件,此時,dbml文件里已經自動生成了包含相關的屬性、方法的DataContext類和實體類MySchool.dbml文件。
2.2.1 數據訪問層ResultService設計
查詢學生成績涉及到學生信息表Student、成績表Result、科目表Subject等三個表,我們使用LINQ查詢語句中的join子句進行聯接,同時利用左外聯接上一聯接的查詢結果上再進行一次查詢,具體語法如下:

2.2.2 業務邏輯層ResultManager和表示層的設計查詢學生成績功能業務邏輯相對比較簡單,具體代碼如下:

表示層窗體FrmSearchStu.cs中添加一個命令按鈕btnSearch、一個DataGridView控件dgvResult,編寫命令按鈕 “查詢所有學生的成績”單擊事件,實現查詢所有學生的成績。

學生信息管理系統其他功能模塊訪問數據庫所使用的全部實體類代碼使用Visual Studio 2010集成開發工具的LINQto SQL設計器自動生成,僅此一項就可以節省許多復雜代碼的編寫工作;LINQ把對數據庫的操作轉化為對實體類的操作,使編程思路和程序邏輯更加明確;同時,代碼中LINQ to OBJECT的使用也節約了大量的代碼編寫工作。由于數據訪問層代碼全部采用LINQ來實現,所以在編寫這些代碼時可以獲得編譯時的類型檢查和IntelliSense支持,提高了編程效率,大大節省了開發時間和成本。
另外,在軟件開發過程中,我們使用了三層結構,當數據庫或用戶界面發生改變時不需要重新開發,只做簡單調整即可,從而大大提高應對客戶變化的能力以及自身的生產力。
本文通過學生信息管理系統,分析了LINQ及LINQ TO SQL的概念和基本架構,對其核心技術和新特性進行了詳細的描述。結合三層結構,詳細介紹了LINQ數據庫訪問的基本方法,如查詢、修改、插入、刪除等操作。LINQ to SQL還全面支持事務、視圖、存儲過程,并且提供簡單的方式來集成數據驗證和業務邏輯規則。這些強大的功能和特性還有待在實際開發過程中繼續研究和應用。
[1]微軟公司.ADO.NET 3.5數據訪問程序開發[M].北京:人民郵電出版社,2010.
[2]宋智軍,邱仲潘.Visual C#2010 從入門到精通[M].北京:電子工業出版社,2011.
[3]牟永敏,丁媛,朱緒利,李良杰.基于LINQ技術的在線考試系統[J].北京信息科技大學學報,2011,26(2):19-24.
[4]涂曙光.LINQ 和LINQ 的未來[J].Technical News,2009,2:17.