轉換現有代碼
大量的ASP頁面使用ADO對象來抽取數據讓我們一起來回顧下幾例典型的案例對你在以後處理移植或者改寫代碼時也許會有幫助
如果你有從單個recordset生成報表的ASP頁面那麼DataReader會是你的好幫手
String strConn strCmd;
strConn = DATABASE=MyAgenda;SERVER=localhost;UID=sa;PWD=;;
strCmd = Select * From Names where ID= + contactIDText;
SQLConnection oCN = new SQLConnection(strConn);
SQLCommand oCMD = new SQLCommand(strCmd oCN);
oCNOpen();
SQLDataReader dr;
oCMDExecute(out dr);
while (drRead()) {
// Use drGetString(index) or
// dr[field name] to ResponseWrite data
}
你可以利用HasMoreRows屬性來快速檢查是否DataReader為空如果你僅僅只簡單處理一系列記錄沒有什麼比DataReader更快更好的對象了它同樣適用於查詢單個記錄
DataReader的內容是不可編輯的但你可以將內容移動到更具管理功能的對象裡如
DataTable或是一個或多個DataRow 對象
當你需要處理表與記錄二者之間的復雜關系時DataReader就不是合適的工具了數據模型鏈接越多SQL命令則會越復雜導航模塊保有連續性最後放入緩存的數據往往多於你所需要的 DataSet 和 DataRelation objects是這種表關系模型的基礎
為管理parent/child 關系ADO同樣也對datashaping engine進行封裝 總的說來 data shaping 和 ADO NET 關系是一回事就設計方面來說二者幾乎沒有共同點 Shaped recordsetsct嵌入列表對象中包括了所有數據表信息ADONET關系是動態鏈接你可以在兩個數據表間隨時建立 ADO依靠於Shaping OLE DB service 提供程序並使用專門的SQL類語言特征以在執行單個ADO命令的過程中生成一個分層的recordset
在 ADONET 中關系中涉及的每個對象總是被看成單獨的個體關系本身作為對象被公開並且具有一定的行為規則例如DataRelation 對象可以從父行到子行一層層進行更改您可以通過將 ForeignKeyConstraint 對象添加到 DataTable 的 Constraints 集合中來進行此操作ForeignKeyConstraint 對象表示當刪除或更新數值和行時對通過外鍵關系相關聯的一組列的約束如前面提到的一旦設置好了關系在它按程序預設終止之前您不能進行可能破壞該關系的更改
正如早先提到的一樣一旦設置了relationship除非它是程序性的終止你不能夠對它進行修改那樣會使它突然中斷
另外 relations沒有遞延性你可以在Customers 和Orders之間Orders 和 Products之間設置兩個不同的關系但是當為了某個customer而對orders導航時你不能夠從一個order跳到相關的products行解決方法是你必須另外打開Orders/Products 關系鎖定你需要的order然後獲取相關的行
程序員需要在ASP Session 對中存儲記錄嗎?通過ADO NET 和 DataSet 對象你可以非常安全的進行工作而不會引起在Storing an ADO Recordset in GIT Might Cause An Access Violation中所論及的麻煩
From:http://tw.wingwit.com/Article/program/net/201311/13401.html