探秘ADO數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有關(guān)信息
學(xué)習(xí)ADO.NET時(shí),你可能會(huì)遇到ADO.NET Access問(wèn)題,這里將介紹ADO.NET Access問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。在示例程序中我們?nèi)圆捎迷瓗?kù)結(jié)構(gòu),數(shù)據(jù)庫(kù)名Demo.mdb,庫(kù)內(nèi)表名DemoTable,表內(nèi)字段名為Name(姓名)和Age(年齡)的兩個(gè)字段,來(lái)構(gòu)造示例程序操作所需的ADO.NET Access數(shù)據(jù)庫(kù),這也和上兩篇文章的示例源碼中的庫(kù)結(jié)構(gòu)相兼容。
下面讓我們看看ADO數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)使用的基本步驟及方法:
首先,要用#import語(yǔ)句來(lái)引用支持ADO的組件類(lèi)型庫(kù)(*.tlb),其中類(lèi)型庫(kù)可以作為可執(zhí)行程序(DLL、EXE等)的一部分被定位在其自身程序中的附屬資源里,如:被定位在msado15.dll的附屬資源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面語(yǔ)句來(lái)實(shí)現(xiàn):
其次,在程序初始過(guò)程中需要初始化組件,一般可以用CoInitialize(NULL);來(lái)實(shí)現(xiàn),這種方法在結(jié)束時(shí)要關(guān)閉初始化的COM,可以用下面語(yǔ)句CoUnInitialize();來(lái)實(shí)現(xiàn)。在MFC中還可以采用另一種方法來(lái)實(shí)現(xiàn)初始化COM,這種方法只需要一條語(yǔ)句便可以自動(dòng)為我們實(shí)現(xiàn)初始化COM和結(jié)束時(shí)關(guān)閉COM的操作,語(yǔ)句如下所示: AfxOleInit();
接著,就可以直接使用ADO的操作了。我們經(jīng)常使用的只是前面用#import語(yǔ)句引用類(lèi)型庫(kù)時(shí),生成的包裝類(lèi).tlh中聲明的智能指針中的三個(gè),它們分別是_ConnectionPtr、_RecordsetPtr和_CommandPtr。下面分別對(duì)它們的使用方法進(jìn)行介紹:
在ADO中,以上所有這些方式與不同類(lèi)型的游標(biāo)相對(duì)應(yīng) .在文中,你將會(huì)發(fā)現(xiàn),ADO.NET雖然與ADO不同,但它具備了ADO的所有功能.相對(duì)照來(lái)說(shuō),你的代碼將從實(shí)際的數(shù)據(jù)源及其物理存儲(chǔ)媒介和格式中抽取數(shù)據(jù).#t#
ADO.NET能夠使DataSet 和 DataReader 將數(shù)據(jù)從數(shù)據(jù)源中抽取出來(lái).前者是記錄在內(nèi)存中的緩存,你可以從任意方向訪問(wèn)并隨意作出修改. 后者是高度優(yōu)化的對(duì)象,在只讀紀(jì)錄集中以?xún)H向前方式向前移動(dòng)。注: DataSet 看起來(lái)象是靜態(tài)游標(biāo),但實(shí)際上,在.NET中,與ADO只讀游標(biāo)相對(duì)應(yīng)的是DataReader 對(duì)象.
在ADO.NET中,雖然對(duì)于服務(wù)器端的游標(biāo)不提供任何支持,但這不意味著你就不能使用游標(biāo).實(shí)際上,你所需要做的步驟是在.NET中輸入ADO庫(kù).你只需在references node上單擊右鍵,就可以在你自己的程序里運(yùn)行本地ADO 對(duì)象.
但是我個(gè)人認(rèn)為,在你想轉(zhuǎn)向.NET時(shí),請(qǐng)慎重考慮. 首先,請(qǐng)務(wù)必完全輸入ADO, 這不會(huì)花費(fèi)太多時(shí)間和精力,這是向.NET邁出的第一步,.但是,這僅僅是萬(wàn)里長(zhǎng)征的第一步而且也是通向.NET必須的一步. .NET的真正附加值是基于一個(gè)均勻的,持續(xù)穩(wěn)定的接口以及本地classes的廣為應(yīng)用之上的.關(guān)于COM libraries是可以被支持的,合理的,但不被鼓勵(lì)的,因?yàn)樗鼉H僅是個(gè)短期解決方案,或者是一個(gè)過(guò)渡步驟.