天天看點

4-2 ADO.NET-查詢和檢索資料11

(1)定義

前面章節中提到過,在應用Command對象時,其指令可以是存儲過程名稱。那麼,什麼是存儲過程?為什麼要使用存儲過程?

首先,看看存儲過程的定義。将常用的或很複雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來,被存儲起來的就是存儲過程。那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,隻需調用execute,即可自動完成指令。

(2)存儲過程的優缺點:

u存儲過程的主要優點展現在:   

n減少網絡傳輸,節約時間 

n速度快 

n出錯的機率小 

n可利用伺服器的一些特殊的資源 

u存儲過程的主要缺點展現在:   

n互動性差 

n不夠靈活 

n商業邏輯層與資料庫在一起,不易移植

存儲過程主要緻命的缺點就是:可能如果要更換資料庫(比如:從sql server到oracle)的話,你的存儲過程就都要重寫了。是以它過分依賴資料庫端,假如你要做一個工程,是可以的,但是如果你要做一個産品,或者以後可能還會用到這個工程的代碼的話,建議少使用。是以任何一種開發方法總有優缺點,不要過分依賴它。

在應用程式中,通常會大量使用存儲過程,這是因為:

第一,維護友善:

如果你把所需要執行的操作代碼寫在程式當中,那麼要做一些小修改,也要對程式做修改并重新編譯,對于使用者來講,這個時候就需要對程式加以深度測試(你說隻修改了一點點,但是使用者不會為你的一句話而冒風險的),存儲過程相對來講就簡單得多,畢竟邏輯上分離出來了,即使要進行稽核,成本也遠比程式要低得多;

第二,重用性:

一個設計好的存儲過程,任何符合其輸入和輸出的程式都可以共用,同樣也改善了維護工作,如果有10個程式要用到這個存儲過程,那要做些修改,自然修改一個存儲過程所花費的成本比程式要低得多;

第三,分工的明确化:

存儲過程如果設計得當,就可以通過一個中間的擴充卡(Adapter)來調用,如此在将來進行資料庫的遷移等,就可以把相應的工作交給具體的熟悉相關資料庫等業務的人員,而不是所有的開發人員都要進行了解。就好比MSSQL/Oracle/DB2類似的,如果資料庫操作腳本寫在程式當中,那麼遷移的工作量将會是所有可能的程式。如果是通過存儲過程,那就可以交給相應的DBA等來完成;

第四,預編譯提高效率:

存儲過程的預編譯,可能性使得語句的執行更優化,特别是對于類似Oracle等具備某些進階優化能力的,那麼包括其既定的執行計劃等可以帶來相當的性能提升;

第五,對于需要多次通路資料的複雜操作:

如果寫在程式當中,那麼就需要不斷的或者大量的提取資料庫中的資料到程式中進行運算,而如果是使用存儲過程,那麼就減少了應用程式與資料庫的互動次數,如此的消耗明顯要低得多。

本實驗操作較為複雜,需要提前準備的内容包括:

n資料庫 —— Grade_Sys資料庫

n建立類 —— BuessinessLayer.cs(業務邏輯檔案)

n建立類 —— DataBaseLayer.cs(資料庫操作檔案)

通過本案例,您将學習到:

n動态生成DataGridView清單資訊内容

nC#開發系統分層思想

n存儲過程參數的輸入與傳回值的擷取

n複雜存儲過程的開發設計

使用者界面如圖4-64所示:

圖4-64 DataGridView與存儲過程應用程式界面圖

u實驗步驟(1):

在VS.NET 2005中建立一個名為示例7的基于Windows的項目。将預設窗體重命名為form14.cs。

u實驗步驟(2):

從工具箱之中拖拽三個GroupBox控件到From窗體,Text屬性分别設定為“教師個人資訊”、“已閱試卷檢索”、“資料顯示區”;向第一個GroupBox控件拖拽五個Lable控件,Text屬性分别設定為“編号:”、“姓名:”、“學位:”、“機關:”、“職稱:”;再向這個GroupBox控件拖拽五個Lable控件;向第二個GroupBox控件拖拽二個ComboBox控件;還要向第二個GroupBox控件拖拽上Button控件,Text屬性分别設定為“按授課學期查詢”、“按授課班級查詢”、“查詢全部”;向第三個GroupBox控件拖拽一個DataGridView控件,olumnHeadersHeightSizeMode屬性設定為“AutoSize”,Dock屬性設定為“Fill”;為DataGridView控件添加列“編号”、“任課班級”、“合作院校”、“課程名稱”、“課時”、“授課學期“、“人數”、“已閱”、“未閱”、“成績單操作”,參加表4-32所示:

表4-32 DataGridView控件編輯列項表

<b>列名稱</b>

<b>列類型</b>

<b>頁眉文本</b>

<b>可見性</b>

編号

DataGridViewTextBoxColumn

True

任課班級

合作院校

課程名稱

課時

授課學期

人數

已閱

未閱

成績單操作

DataGridViewButtonColumn

u實驗步驟(3):

資料庫的設計參見圖4-65:

圖4-65 資料庫設計圖

資料庫為Grade_Sys,用了13個表,具體字段設計情況請參見圖4-92。另外編寫了24個存儲過程。資料庫環境是SQL Server 2005。

u實驗步驟(4):

滑鼠右擊項目,在彈出的菜單中選擇“添加”、“建立項”,在彈出的“添加新項”窗體中選擇“代碼檔案”,名稱改為“BuessinessLayer.cs”,點選“添加”按鈕,完成添加。

在BuessinessLayer.cs檔案中,編寫如下代碼:

(代碼待續)

本文轉自 qianshao 51CTO部落格,原文連結:http://blog.51cto.com/qianshao/216110,如需轉載請自行聯系原作者