解析資料訪問層操作資料庫的方式

來源:互聯網
上載者:User

在資料訪問層對資料庫進行操作的設計上,主要有這麼幾種:拼接字串,帶構造參數的基本Sql語句,預存程序,視圖等。 因為這次做系統主要是為了促進我們學習,所以在本次機房收費系統中,我分別嘗試了這幾種方式。

 

舉幾個例子:

A、根據條件查詢上下機記錄時,採用帶參數的Sql語句,以上下機記錄表,學生資訊表,上機卡資訊表為基表進行聯集查詢。

B、在添加結賬資訊,查詢儲值記錄和卡內餘額等時採用的是帶輸入參數或輸出參數的預存程序。在建立預存程序時,還嘗試採用了控制語句和內建函數,尤其是添加結賬資訊時。

C、查詢學生基本資料的時候,牽扯到了視圖的方式,採用了拼接字元創的形式去查詢由上機卡和學生資訊表為基表建立的視圖。

 

下面,根據我在採用這幾種方式時的體會,比較他們各自的優缺點:

 

1、採用拼接字串是肯定不可取的,雖然可以可以根據需要隨時在用戶端自訂Sql語句,但這樣很危險,例如Sql語句注入漏洞問題。

2、採用建構函式基本Sql語句應對簡單的查詢還可以,也比較安全,如果是比較複雜的查詢,會把人逼瘋的(例如聯集查詢7,8張表)

舉個例子:

這是我在查詢上下機記錄時用到的一段帶參數的Sql語句,這裡牽扯到三張表,採用內串連。

selectoor_CardID,stu_StuName,stu_Department,stu_Grade,oor_OnDate,oor_OnTime,oor_Computer 

fromtb_OnOffRecord inner join tb_CardInfo 

on oor_CardID=cif_CardID and oor_CardID=@CardID and cif_State=@CardState and oor_OffDate is null and oor_State=@CardState

inner jointb_StudentInfo on cif_StuID=stu_pk_StuID

因為資料庫考慮到聯集查詢,所以欄位前加了首碼,如果沒有首碼,那麼一些欄位,例如CardID前還要加上表名,那就更複雜了。(這也體現了欄位首碼的好處)

3、視圖和基本sql語句的直接區別在於:sql語句多一道網路傳輸,而視圖是直接執行資料庫的視圖。預存程序也是這樣,預存程序為什麼快也有這個原因,也就是說視圖和預存程序只需要傳輸一個名稱即可,而sql語句可能要傳輸大量的字串,視圖和預存程序顯然會增加伺服器資料庫負擔。

4、預存程序和視圖的區別,主要體現在視圖是可視化的聯集查詢,而預存程序不是,只不過視圖更直觀,而且你可以像查詢表一樣去查詢檢視,而不用考慮那些什麼左串連右串連之類的語句。對於非常複雜的連結資料表來說(如果七八個表連在一起,還不是簡單的單鏈),你寫SQL語句會把大腦逼瘋的,用視圖就可以大大減輕工作難度。

用另一種方式來表達,視圖和預存程序降低了應用程式和物理表的耦合。預存程序是字串敘述的,而視圖更加直觀,要達到的效果有一定相似性。


採用哪種方法要看具體的程式應用情境了,顯然直接拼接字串是不可取的,如果考慮執行效率而不考慮伺服器資料庫壓力,用視圖和預存程序的辦法返回DataTable很簡單,如果項目比較小,用戶端的資源隨便用.可以直接使用構造參數的基本sql語句,牽扯到幾張表時,在用戶端擷取資料後,從多個返回的DataTable中取出資料,用代碼產生一個新DataTablee返回也不錯。具體問題還要具體分析,把握平衡。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.