專家介紹ADO.NET使用相關(guān)問(wèn)題進(jìn)行研究
ADO.NET使用泛型編程已經(jīng)離我們不遠(yuǎn)了,在微軟最近隨SQL Server Yukon Beta1發(fā)行的.NET Framework 1.2中就已經(jīng)有了泛型的影子。雖然現(xiàn)在它還是問(wèn)題多多,但是相信隨著新版.NET Framework的正式發(fā)行。
.NET系統(tǒng)是一個(gè)單根繼承系統(tǒng),所有的類型都派生自O(shè)bject。我以前一直認(rèn)為在單根繼承系統(tǒng)中用不著泛型。既然所有的東西都可以作為Object傳遞,又何必使用泛型呢?只是增加復(fù)雜度而已,除了看起來(lái)高深一點(diǎn),似乎沒(méi)有別的什么好處了。#t#
但是,當(dāng)兩個(gè)***的單根系統(tǒng),Java和.NET,都勢(shì)不可擋地要加入泛型編程時(shí),我不免要重新審視這個(gè)問(wèn)題ADO.NET使用——為什么一定要泛型編程?歸納起來(lái),泛型比非泛型具有下面兩個(gè)優(yōu)點(diǎn):
1、 更加安全
在非泛型編程中,雖然所有的東西都可以作為Object傳遞,但是在傳遞的過(guò)程中免不了要進(jìn)行類型轉(zhuǎn)換。而類型轉(zhuǎn)換在運(yùn)行時(shí)是不安全的。使用泛型編程將可以減少不必要的類型轉(zhuǎn)換,從而提高安全性。ADO.NET使用
2、 效率更高
在非泛型編程中,將簡(jiǎn)單類型作為Object傳遞時(shí)會(huì)引起B(yǎng)oxing和Unboxing操作,這兩個(gè)過(guò)程都是具有很大開(kāi)銷的。使用泛型編程就不必進(jìn)行Boxing和Unboxing操作了。
.NET泛型具有很好的二進(jìn)制重用性。這一點(diǎn)得益于.NET將泛型內(nèi)建在CLR之中。C++泛型和評(píng)估中Java泛型所ADO.NET使用依靠的是它們各自的編譯器所提供的特性,編譯器在編譯泛型代碼時(shí)將確切的類型展開(kāi),這就難免會(huì)出現(xiàn)代碼膨脹的問(wèn)題。而.NET的泛型代碼是在運(yùn)行時(shí)由JIT即時(shí)編譯的,這樣CLR就可以為不同類型重用大部分的即時(shí)編譯代碼了。
數(shù)據(jù)庫(kù)支持多種不同類型的查詢。有些查詢通過(guò)引用一ADO.NET使用個(gè)或多個(gè)表、視圖或者是通過(guò)ADO.NET使用調(diào)用一個(gè)存儲(chǔ)過(guò)程來(lái)獲取數(shù)據(jù)行,有些查詢會(huì)對(duì)數(shù)據(jù)行進(jìn)行修改,還有一些查詢通過(guò)創(chuàng)建或修改諸如表、視圖或存儲(chǔ)過(guò)程等對(duì)象來(lái)對(duì)數(shù)據(jù)庫(kù)的結(jié)構(gòu)進(jìn)行有關(guān)操作??墒褂肅ommand對(duì)象對(duì)數(shù)據(jù)庫(kù)執(zhí)行任何一種查詢操作。