在傳統的數據庫應用程序中,必須建立與數據庫的連接,並在數據庫應用程序運行過程中保持連接狀態。出於各種原因,該方法在許多數據庫應用程序中是不實用的。原因有以下幾點:
1. 一般情況下,一個數據庫只可以維持少量的並發連接。維持過多並發連接將降低數據庫的總體性能,增加數據庫應用程序的訪問時間。保持四個用戶的連接應該可以接受,但同時連接100個用戶可能就不行了。同時訪問Web數據庫的訪問者可能非常多,例如大型網上商店,所有訪問都保持連接是不現實的。
2.在Web應用程序中,浏覽器從服務器請求網頁,服務器發送該頁後,服務器就不再與浏覽器有任何連接,直到下一次請求為止。在這種情況下,維持打開的數據庫連接是不可行的,因為沒有辦法知道在浏覽器端數據使用者是否還將對數據庫訪問。
3. 如果數據庫應用程序的多個控件需對數據庫數據操作,則多個控件都必須和數據庫建立連接,或者為這些控件設計一種方式以相互傳遞數據。這使問題變得復雜。
出於以上這些理由,ADO.Net數據庫訪問被設計為以斷開連接的數據模型為基礎,應用程序只在獲取或更新數據時保持連接,其它時間都是斷開的。由於數據庫並未被大部分時間空閒的連接占用,所以它可以為更多用戶服務。除此以外,ADO.Net允許將DataSet中存儲的數據用XML標記語言描述,使異構數據庫的數據交換成為可能。這也是采用DataSet的一個重要原因。
數據集DataSet是從數據庫檢索的記錄的緩存。使用OleDbAdapter或SqlDataAdapter類從數據庫指定表中取出感興趣的記錄,將這些感興趣的記錄集合做成一個新表,填充到DataSet類對象中。可在DataSet類對象中填充多個表,並可在DataSet類對象中指定表和表的關系,以及指定對表包含數據的約束信息。DataSet對象被建立在內存中,可以認為是數據庫在內存中的一個子數據庫。DataSet對象只在獲取或更新數據時保持和數據庫連接,其它時間都是斷開的,使數據庫可以自由執行其它任務。盡管數據集是作為從數據庫獲取的數據的緩存,但數據集與數據庫之間沒有任何實際關系。