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才有办法把一些良好的数据库环境表现子得很好。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值