回顧ASP
ASP (Active Server Page) 的功能:
可以把VBScript 編寫的伺服器端指令碼嵌入到Web頁面中, 在伺服器端動態產生頁面內容;
可以通過COM 組件與資料庫連接, 從而提供強大的交易處理功能。
ASP的缺點:
(1) 由於用指令碼語言編寫的控制邏輯要嵌入到HTML標記中, 因此ASP頁面的開發效率低, 後期維護困難;
(2) 動態部分採用指令碼語言編寫, 其功能受到限制, 不利於開發複雜的程式;
(3) 程式員要自己維護頁面之間資料的傳遞工作;
(4) ASP技術很難採用物件導向的思路和方法來開發程式;
關於ASP.NET
可以採用WebForm編程模型, 該模型由底層系統自動完成客戶(Client) 和伺服器(Server) 之間繁瑣的互動, 而且還提供了狀態管理功能, 能在不同頁面請求之間自動維護頁面資料。
關於B/S 結構
與傳統的C/S (Ciient/Server) 結構不同, B/S 結構中的大部分功能都在伺服器端實現。伺服器根據使用者瀏覽器發送的請求, 在進行相應的運算和處理後, 向使用者瀏覽器發送Web頁面, 頁面由標準的HTML 文本和Javascript 用戶端指令碼構成。
ASP.NET的三層開發設計模型
分層模型的優點:
每一層只實現相對獨立的功能,當任何一層發生變化時, 只要保持層間介面關係不變, 則其它各層都不會受到影響。
(1) 使用者介面層 (User Interface Tier):
顯示由商務邏輯層動態傳送的資料資訊,並通過使用相應的HTML 標籤和CSS (Cascade Style Sheet) 模式來實現。同時還要負責使用者錄入資料的獲得和校正,並傳送給商務邏輯層。
(2) 商務邏輯層 (Business Logic Tier):
為使用者介面層提供功能調用, 同時它又調用資料訪問層所提供的功能來訪問資料庫。還要根據系統設計, 構造工程中關鍵的幾個對象, 實現工程中的大部分邏輯控制功能。
(3) 資料訪問層 (Data Access Tier):
主要用來實現與資料庫的互動, 即完成查詢、插入、刪除和修改的功能。它根據商務邏輯層的要求,從資料庫中提取或修改資料。訪問資料庫是系統中最頻繁、最消耗資源的操作, 所以要最佳化對資料庫的訪問, 提高系統的效能和可靠性。
BBS 工程執行個體
整個工程被劃分為四個功能模組:
目錄管理(Directory):採用“樹”結構實現;
文章管理(Article):文章存放在相應的目錄下;
使用者管理(User):對使用者的管理和授權;
許可權管理(Right):授權細化到各級目錄和每篇文章;
系統採用SQL Server 2000 Enterprise 資料庫,Visual Studio開發工具和C#語言。
整個工程為一個“方案”(solution),而分層模型中的每一層都對應為一個“項目”(Project),每個項目都對應各自的“名字空間”(Namespace),各個項目都從屬於方案。
本工程中包括四個項目,其中的Web、BussinessFacade 和DataAccess 項目分別對應設計模型的三個層次,還有一個項目Common用於定義層間的資料介面。結構:
(1) Web 項目
Web 項目與“使用者介面層”對應,在這一層中,每個WebForm 頁面顯示部分存放在aspx檔案中。
(2) BusinessFacade 項目
BusinessFacade 項目與“商務邏輯層”對應,在這一層中包括對四個“類”的定義:
DirectorySystem、ArticleSystem、UserSystem 和 RightSystem,它們對應於系統的四大功能。
例如在RightSystem 類中就提供了:
用於目錄許可權鑒別的CheckDirectoryRight 方法;
用於過濾目錄列表的FilterDirectoryList 方法;
用於使用者授權的AuthorizeUser 方法;
以及其它一些用於許可權管理的成員函數,這些成員函數可以在使用者介面層中直接調用。
在這一層中要引入DataAccess 項目的名字空間, 從而使用該項目提供的功能實現對資料庫的訪問。
(3) DataAccess 項目
DataAccess 項目與“資料訪問層”對應,在這一層中也包括四個“類”的定義:
DirectoryAccess、ArticleAccess、UserAccess 和RightAccess。每個類的成員函數都是根據商務邏輯層的要求來訪問SQL Server 中相應的預存程序(Stored Procedure)。
例如: 在ArticleAccess 類中的LoadDetailByID 方法,就是用來調用SQL Server 中的GetArticleDetailByIDStatus 預存程序,從而實現通過文章的ID和狀態得到文章的詳細資料。
在CLR 平台上進行.net 編程,一般由系統的垃圾收集機制(Garbage Collect)來消除不再使用的對象。但由於訪問資料庫將會消耗大量的系統資源, 所以這一層的四個類都派生自 System.IDisposable 介面(使用using 語句引用),使得在不使用本層對象的時候及時釋放掉所佔用的資源。
(4) Common 項目
為了使得各層之間在傳遞資料時具有統一的資料介面,在三個層次對應的項目之外又開發了一個Common 項目。在這個項目中定義了四個類:
DirectoryData、AricleData、UserData 和RightData。這些類都派生自System.Data.DataSet 類,在每個DataSet 中定義了一些DataTable 用來按照固定的格式儲存相應的資料。
對於Web、BusinessFacade 和DataAccess 項目中定義的類, 其成員函數的參數和傳回值的類型就可以採用Common 項目中定義的類, 這些類就是不同層之間資料傳送的標準介面。
附加代碼:
在ASP.NET 支援下,利用ADO.NET 可方便地訪問基於Web 的資料庫,不管資料來源是關聯式資料庫、非結構的資料庫、文字資料庫(如XML檔案),還是如Microsoft Excel 一樣的表格式資料庫,都可通過ADO.NET來存取。
在實現遠端資料庫時,需要將ADO 與RDS 整合使用,以實現高效能、高可靠性的遠程操作功能。
DataGrid 控制項的更新Code 如下:
void editcommand (Object sender, DataGridCommandEventArgs e)
{
grid1.EditItemIndex = (int)e.Item.ItemIndex;
//重新讀取資料並進行綁定
bindgrid();
}
void Cancelcommand (Object sender, DataGridCommandEventArgs e)
{
grid1.EditItemIndex = -1;
//重新讀取資料並進行綁定
bindgrid();
}
void updatecommand (Object sender ,DataGridCommandEventArgs e)
{
//利用Sql 語句實現資料的更新
string xm = grid1.DataKeys[(int)e.Item.ItemIndex];
string[] cols[4];
int numcols = e.Item. Cells.Count;
for (int i = 2; i < numcols; i++)
{
//取出各編輯框的值
String colvalue = ((TextBox)e.Item.Cells[i].Controls[0]).Text;
cols[i-2] = colvalue ;
}
string updatecmd ="UPDATE reg SET name ='"+ cols[0 ] +"',";
updatecmd +="sex ='"+ cols[1] +"',addr ='"+ cols[2] +"',";
updatecmd +="dh ='"+ cols[3] +"' where name =" + xm;
SqlCommand mycommand = new SqlCommand(updatecmd, myconnection);
mycommand.Connection.Open(); //開啟資料連線
mycommand.ExecuteNonQuery(); //執行串連
grid1.EditItemIndex = -1; //串連成功,返回初始狀態
mycommand.Connection.Close(); //關閉串連
bindgrid(); //重新讀取資料並綁定
}
void bindgrid()
{
//資料繫結
SqlDataAdapter mycommand = new SqlDataAdapter("select * from reg", myconnection);
DataSet ds = new DataSet();
mycommand.Fill(ds,"reg");
grid1.DataSource = ds.Tables["reg"].DefaultView;
grid1.DataBind();
}
學習來源:http://www.cnki.net