使用ADO.Net程序使用方法與注意事宜
ADO.Net程序作為下一代的開發(fā)程序,代號為Orcas。最近微軟推出了VS 2008 Professional測試版,涵蓋了VS之前版本的所有功能,快捷鍵也基本完整,與將要發(fā)布的RTM版不會有什么太大的差別。
對于ADO的數(shù)據(jù)訪問技術是比較成熟的。ADO 訪問數(shù)據(jù)的時候可以斷開連接也可以不斷開連接。但是對于ADO.Net程序而言保持連接簡直是浪費,因為其數(shù)據(jù)已經(jīng)被提到了客戶端來處理,已經(jīng)和數(shù)據(jù)庫沒有關系了。所以在ADO.Net的數(shù)據(jù)庫系統(tǒng)中一般是當取回數(shù)據(jù)或者完成操作以后就會關閉數(shù)據(jù)庫連接(實際上也許沒有被關閉)。
ADO.Net的數(shù)據(jù)庫連接的關閉是返回緩沖池中而不是一定斷開了和數(shù)據(jù)庫的連接,對于何時關閉這個連接由ADO.Net程序的緩沖池管理機制來決定。而ADO在使用的時候如果關閉了連接那么這個連接是真的被關閉了。#t#
這也是Delphi里面我們對于一個數(shù)據(jù)庫一般只采用一個連接的原因,為了減少數(shù)據(jù)庫連接的數(shù)目來降低數(shù)據(jù)庫負擔,當然COM+和MTS也提供了連接池機制,但是其連接池機制似乎不是很成熟,特別是MTS中采用系統(tǒng)的數(shù)據(jù)連接池可能會造成系統(tǒng)的死鎖,當然我們可以使用自己的連接池或者第三方的連接池來管理數(shù)據(jù)庫連接。
而在ADO.Net程序中這一功能是是系統(tǒng)的一部分,但是在使用中發(fā)現(xiàn)只有連接被關閉才會返回池中,如果連續(xù)的創(chuàng)建數(shù)據(jù)庫連接而已經(jīng)使用的數(shù)據(jù)庫連接沒有被返回池中這個時候,ADO.Net會真實的創(chuàng)建數(shù)據(jù)庫連接并且返回給用戶。由此可見在ADO.Net中如果不關閉連接而是不停的請求連接是一件很恐怖的事情。
要防止多個線程同時訪問同一個數(shù)據(jù)庫連接。而在Delphi 的客戶端開發(fā)的時候我們要盡量的將少生成業(yè)務對象的實例,ADO.Net程序對于使用過的業(yè)務對象如果沒有全局申明,那么在其申明的域以外就會被釋放,一個好的傳統(tǒng)是對于每個對象都在使用過以后賦值為nil,從而讓系統(tǒng)回收。
在構建一個State Server時,我們最好將ADO.Net程序 設置為True,否則只有當這個State Object 被釋放的時候才會被關閉,因為KeepConnection只保證在沒有數(shù)據(jù)集被關閉的情況下才能關閉連接!為此我們在使用State Server Object的時候可以將KeepConnection屬性設置為True,這樣我們就能夠在我們不需要數(shù)據(jù)連接而需要對象的狀態(tài)的時候自動的將數(shù)據(jù)庫連接關閉。