資料存取策略的建議事項
更新:2007 年 11 月
ADO.NET 會使用一個資料存取模型,讓您開啟連接、取得資料或執行作業,然後關閉連接;此外,ADO.NET 還會針對您操作該模型的方式,提供兩個基本策略。第一種模型是將資料存放在資料集中,而資料集是指您可以在與資料來源中斷連接時使用的記憶中的快取區。若要使用資料集,您需要建立它的執行個體,然後使用資料配接器來將資料來源的內容放入該資料集。接著,您就可使用資料集中的資料,例如將控制項繫結至資料集成員。如需詳細資訊,請參閱 Visual Studio 中的資料集概觀。
另一種方法則是直接在資料庫執行作業。在這個模型中,您會使用包含 SQL 陳述式或預存程序參考的 TableAdapter 查詢或資料命令。接著,您可執行查詢或命令來進行這項作業。如需詳細資訊,請參閱將資料擷取至您的應用程式中。
在資料集內儲存資料
在 Visual Studio 應用程式中,常見的資料存取模型是將資料儲存於資料集內,並使用 TableAdapter 或資料配接器來讀取和寫入資料庫中的資料。這種資料集模型有下列幾項優點:
使用多個資料表:一個資料集可以包含多個結果資料表,並以不連續的物件來維護這些物件。您可以個別使用這些資料表,或是以父-子資料表的方式進行巡覽。
操作來自多個來源的資料:一個資料集內的多個資料表可以代表來自許多不同來源的資料,例如,來自不同資料庫、來自 XML 檔、試算表等的資料,可以全部集中於同一資料集內。資料儲存在該資料集後,您便可以操作資料,將資料以同類型的格式來建立關聯,如同資料是出自同一個來源。
在分散式應用程式的各層中移動資料:由於資料是保存在資料集中,所以您便能輕易地將它在應用程式的展示層、商務層和資料層之間移動。
和其他應用程式交換資料:資料集提供了強大的方法,可以與應用程式的其他元件或與其他應用程式進行交換。資料集對於將資料序列化成 XML,以及讀寫 XML 結構描述之類的功能,都提供豐富的支援。
資料繫結:如果您在使用表單,則將控制項繫結至資料集內的資料,通常要比以程式設計的方式,在執行命令後將資料值載入控制項中來得簡單。
維護資料錄以重複使用:資料集可以讓您重複使用相同的資料錄而不需一再查詢資料庫。您可使用資料集的功能來篩選和排序資料錄,而且在分頁的情況下也可使用資料集當做資料來源。
程式撰寫容易:在使用資料集時,您可以產生類別檔案,以物件表示資料集的結構 (例如,資料集內的 [Customers] 資料表可用 dataset.Customers 物件來存取)。這使得資料集的程式撰寫較為容易、清楚,也較不易發生錯誤,同時還受到 IntelliSense、資料配接器組態精靈等 Visual Studio 工具的支援。
直接執行資料庫作業
另外,您也可直接與資料庫互動。在這個模型中,您會使用包含 SQL 陳述式或預存程序參考的資料命令物件,接著,您可執行命令來進行這項作業。如需詳細資訊,請參閱命令和參數 (ADO.NET)。
安全性注意事項: |
---|
使用 CommandType 屬性設為 Text 的資料命令時,請先仔細檢查用戶端傳送出來的資訊,然後再將這些資訊傳遞至資料庫。惡意使用者會嘗試傳送 (插入) 修改過或額外的 SQL 陳述式,以獲取未經授權的存取權或損壞資料庫。在將使用者輸入傳輸到資料庫前,一定要確認資訊是有效的。最好的做法是盡可能使用參數型查詢或預存程序。 |
直接執行資料庫作業的優點如下:
額外的功能:如前所述,有些作業 (例如執行 DDL 命令) 只有靠執行資料命令才能完成。
在執行時具有更大的控制權:您可以使用命令 (和讀取資料時使用資料讀取器) 進而以更直接的方式,控制 SQL 陳述式或預存程序如何執行、何時執行,以及結果或傳回值會是什麼。
負荷較低:直接在資料庫中進行讀取和寫入,您就不需要將資料存放在資料集中。因為資料集需要額外的記憶體,所以使用資料命令便可減少一些應用程式的負荷。這一點尤其適用於當資料只會使用一次的情況,例如在網頁中顯示搜尋結果,因為在這種情況下,可能並不需要在顯示資料前建立及填入資料集。
在某些狀況下可以撰寫比較少的程式:在一些情況中,特別是 Web 應用程式,如果要儲存資料集的狀態,即需撰寫額外的程式。例如,在 Web Form 網頁中每一回進行存取時,網頁就得重新建立,除非您加入儲存和還原資料集的程式,否則每一回存取時資料集也會被捨棄而又重新建立。如果您使用資料讀取器直接讀取資料庫,就能避免管理資料集所需的額外步驟。
存取資料的建議事項
下列章節將提供特定類型應用程式應使用哪種資料存取方法的建議事項。
Windows Form
通常在 Windows Form 中使用的是資料集。Windows Form 通常是用於豐富型用戶端 (Rich Client),其中表單 (及其資料) 並不會隨著每次使用者作業建立及捨棄,這點與 Web Form 不同。Windows Form 應用程式一般也會提供可利用維護資料錄快取區的資料存取案例,例如在表單中一個一個顯示資料錄。如需詳細資訊,請參閱建立用戶端資料應用程式。
具體來說,請在下列情況下使用資料集:
如果您重複使用相同的資料錄,例如允許使用者在資料錄之間巡覽。
如果您使用特別設計來使用資料集的 Windows Form 資料繫結架構。
上述 Web Form 中所列的其他任一原因。
在下列情況下使用 TableAdapter 查詢或資料命令:
如果您從資料庫取得純量值。
如果您執行非查詢作業,例如 DDL 命令。
如果您要取得顯示在表單中的唯讀資料,例如建立報告;換句話說,如果您在存取資料之後就不需要使用資料,則請使用資料命令。
Web Form
通常使用資料命令;擷取資料時則使用資料讀取器。由於 Web Form 網頁及其控制項和元件在每次來回存取網頁一次時就需要重新建立,因此除非要在每次來回存取之間快取網頁,否則每次建立和填滿資料集通常並不是有效率的做法。
請在下列情況時使用資料集:
您要使用多個個別資料表或來自不同資料來源的資料表。
您與其他應用程式或元件 (例如 XML Web Service) 交換資料。
您需要在從資料庫取得的每筆資料錄上執行大量處理。如果您使用資料命令和資料讀取器,則每當讀取一筆資料錄時,就可能會讓連接長時間處於開啟的狀態,這樣一來便會影響應用程式的效能和延展性 (Scalability)。
如果您的資料處理中包括互相依存的資料錄 (例如查詢關聯式資料錄中的資訊)。
如果您要在資料上執行 XML 作業,例如 XSLT 轉換。
如果您要利用資料集具有的易於撰寫程式特性。
XML Web Service
XML Web Service 是 ASP.NET Web 應用程式,因此與 Web Form 網頁使用的模型相同: XML Web Service 是在每次呼叫時才建立和捨棄的。這表示 XML Web Service 的資料存取模型和 Web Form 的資料存取模型絕大部分相同。不過,XML Web Service 通常是中介層 (Middle Tier) 物件,而且它們的重要用途之一通常是在 Web 上與其他應用程式交換資料。
請在下列情況中使用資料集:
您的 XML Web Service 傳送和接收資料,例如將它以方法的傳回值傳送並以方法的引數接收。這在 XML Web Service 中是個重要的選擇;即使您會因其他原因考慮使用資料命令,但與其他元件進行資料交換幾乎都應使用資料集。
上面 Web Form 中所列的任一原因。
請在下列情況中使用資料命令 (並在適當的情況下使用資料讀取器):
XML Web Service 擷取純量值。
XML Web Service 執行非查詢作業,例如 DDL 命令。
XML Web Service 呼叫預存程序來執行資料庫內的邏輯。