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