ADO的建立連結

ADO的建立連結 ADO的連結主要可分成透過OLE DB Privder的方式與OLE DB Provider for ODBC,前者 很明顯的是Microsoft公司極力發展的方式,據說它比透過ODBC的方式快且所需資源少 ,但實際上如何,幾年之後就可很清楚了。不過目前有Privder提供OLE DB介面者尚沒有 非常多,但提供ODBC介面者就很多了,在只有ODBC Driver之下,如果也要使用ADO的話 那可以使用OLE DB Provider for ODBC的介面,然而它的Performance和使用RDO來比, 那得花上好些工夫試看看,至少我沒有那些工夫做這種事。 先看看OLE DB Provider for ODBC的連法 Dim connstr As String Set cn = New ADODB.Connection cn.Provider = "MSDASQL" 'Microsoft OLE DB Provider for ODBC) '因爲是透過ODBC來做,所以connstr的設定,和使用RDO ODBC的連結字串皆相同 connstr = "UID=cww;PWD=jjh5612;Database=cwwpf@eis;" _ + "Driver={OpenLink Generic 32 Bit Driver};" _ + "Host=192.168.0.61;" _ + ";FetchBufferSize=30" _ + ";NoLoginBox=Yes" _ + ";Options=" _ + ";Protocol=TCP/IP" _ + ";ReadOnly=No" _ + ";ServerOptions=" _ + ";ServerType=Informix 7.2" cn.ConnectionString = connstr cn.Open sql = "Select * from testtab order by case_no" Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn '設定該Resultset依附在cn物件上開啓 rs.CursorLocation = adUseServer rs.LockType = adLockOptimistic rs.CursorType = adOpenKeyset rs.Source = sql rs.Open 如此啓了一個Connection。不過這邊要提出的是,ADO不像RDO它的Recordset物件不一定 要附屬於某一個已開啓的Connection物件。回想一下,一般RDO Recordset的建立是透過 rdoConnection.OpenResultset或rdoQuery.OpenResultset的方式,而rdoQuery的建立是 透過rdoConnection.CreateQuery,所以這裏可見到rdoConnection/rdoQuery/rdoResultset 是有階層觀念的,rdoResultset一定要透過現存的一個rdoConnection物件才能建立,但 是在ADO則不同,adoResultset物件可以自行就產生了,不必透過adoConnection物件,但 它也可以將Connection依附在現存的adoConnection之下,像上面的例子便是如此。而以 下的例子則是單獨使用ado Resultset建立連結的方式。當然,單獨使用Resultset物件來 建立連結它也有建立一個adoConnection來連,只是我們沒有辦法Reference到它;而在比 較複雜的系統(例如要有Transacction),那還是得先從ado Connection物件建立起再來做。 connstr = "UID=cww;PWD=jjh5612;Database=cwwpf@eis;" _ + "Driver={OpenLink Generic 32 Bit Driver};" _ + "Host=192.168.0.61;" _ + ";FetchBufferSize=30" _ + ";NoLoginBox=Yes" _ + ";Options=" _ + ";Protocol=TCP/IP" _ + ";ReadOnly=No" _ + ";ServerOptions=" _ + ";ServerType=Informix 7.2" sql = "Select * from testtab order by case_no" Set rs = New ADODB.Recordset '用以下的方式就不用單獨設定CursorType/LockType/Source等等的屬性,而原本第二 '個叄數是存放所依附的adoConnect物件,現在則改成連結的字串 rs.Open sql, constr, adOpenKeyset, adLockOptimistic 而使用OLE DB 的方式呢? Set cn = New ADODB.Connection connstr = "Data Source=OPEN_VIEW;User=cww;Password=jjh5612;Initial Catalog=Pubs" cn.Provider = "SQLOLEDB" '設定Privder是SQL Server OLE DB,該名稱隨不同的 'Database Privder不同而有所不同 cn.ConnectionString = connstr cn.Open sql = "Select * from Authors" Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.CursorLocation = adUseServer rs.Open sql, cn, adOpenKeyset, adLockOptimistic 上面的例子中,Data Source指的是SQL Server的名稱,而Initial Catalog指的是Database 名稱在這裏,我們也可以不設定Database的名稱,而在ado Connection建立之後再來設 定Connection物件的DefaultDatabase如下: Set cn = New ADODB.Connection connstr = "Data Source=OPEN_VIEW;User=cww;Password=jjh5612;" cn.Provider = "SQLOLEDB" cn.ConnectionString = connstr cn.Open cn.DefaultDatabase = "cwwtest" sql = "Select * from testtab" Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.CursorLocation = adUseServer rs.Open sql, cn, adOpenKeyset, adLockOptimistic Set rs2 = New ADODB.Recordset cn.DefaultDatabase = "Pubs" rs2.Open "Select * from Authors", cn, adOpenForwardOnly, adLockReadOnly 如此一來,同一個Connection物件,便可以有不同Database的asoResultset物件附於其 上了。 而連結Access數據庫呢? cn.Provider = "Microsoft.Jet.OLEDB.3.51" connstr = "Data Source=e:/cwwtest.mdb;" cn.ConnectionString = connstr cn.Open sql = "Select * from testtab order by case_no" Set rs = New ADODB.Recordset Set rs.ActiveConnection = cn rs.Open sql, cn, adOpenKeyset, adLockPessimistic 不過使用ADO來連結Access數據庫有時候沒有辦法發揮得像DAO那般的流暢,例如說,在 這個例子中,雖然我們設定悲觀鎖定(adLockPessimistic),但實際上測試結果,它還是 樂觀鎖定。再則,它沒有辦法像DAO使用Seek指令。而且ADO沒有CreateDatabase CreateTable的功能;由這裏來看,ADO取代DAO的日子尚未到來,但是VB6.0的環境,使 用ADO纔有辦法把一些良好的數據庫環境表現子得很好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章