📄 20.3.2 利用ado对象访问数据库.txt
字号:
20.3.2 利用ADO对象访问数据库
为了演示在VB环境中添加ADO对象的支持,我们再新建一个VB工程。然后选择 <Project\References. ..】菜单项,在弹出的如图 20.28所示的 References对话框中找到 Microsoft ActiveX Data Objects 2.7 Library一项井复选上,从该对话框底部提供的信息可知,我们所选的这个ADO对象是msado15.dll这一动态链接库提供的。
"‘
第20 HOOK相踉揭
IIvalol:曲-,
。K
C.nCeI
"4
叫"-
愤‘'
同σ回畸缸徘咱~DàOl咱!.S2.7Lb.,.
e唱
t皿aticn C:\P睛gr..闻0S\ec...r嗣同脚'istlhi\8:蜘翩翩5."
1M鸣"筒10'去a骂旬rd
. 圈20.28 为VB程序添加ADO对象的支持
单击【OK】按钮关闭References对话框。然后选择【View\ObjectBrowser】菜单项,这时将打开对象浏览器窗口 (如图20.29所示),其中可以看到Command对象、Connection对象,还有Recordset对象。这里需要注意,这些在VB中都是对象,但在VC中都是COM接口。
然后在程序窗体中放置一个列表框 (List1)和一个按钮控件 CCommandl)。程序窗体设计界面如图20.30所示。双击界面上的按钮控件,这将跳转到代码编辑窗口。下面笔者将分别介绍如何利用ADO的三个核心对象执行SQL语旬,以便访问数据库数据的实现方法。
卜lIlIII川 t川M
IADODB 3..!扛
j:1
鱼ιj l.Jst1
ot ~C倪育回cUon' ;
BeglnTransCoaplete
Co..an.Tiaeout
, Co..itTransCoaplete
c。阳、ectCoaplete c。阳市ctlonStrlng
Clal. C...ctl_
JJ:!一 | j:
'回ber of ApoDB
图 20.29Object Browser对话框图 20.30 VB程序窗体设计界面利用 Connection对象执行SQL语旬首先介绍利用 Connection对象执行SQL语句读取数据库数据的方法。这时所编写的Commandl按钮单击事件的代码如例20-22所示。例20-22
Private Sub Commandl_Click()
D工m conn As New ADODB.Connection
Dl.m rst As ADODB .Recordset
conn .ConnectionString = "Provider=SQLOLEDB.l;Password=sa;Pers工st Security 工nfo=True; User ID=sa;Initial Catalog=pubs "
760 I ....静'
G川
conn.Open
Set rst = conn.Execute("select * from authors")
Do Until rst.EOF
Listl.AddItem rst("~u_lname")
rst.MoveNext
Loop
End Sub
在如例20-22所示代码中,首先定义了一个连接对象: conn,然后定义一个记录集对象: rsto注意,这里在定义连接对象时使用了new操作符,但在定义记录集对象时并没有使用 new操作符。如果使用了 new操作符,这与VC中使用 new操作符产生一个对象的作用是一样的,也就是构造了该对象:如果没有使用new操作符,那么所定义的对象是没有经过初始化的,这样随后的代码将不能直接访问其属性和方法,必须先对该对象进行赋值之后,才能访问这些内容。
接着,为连接对象的连接字符串赋值。这个连接字符串就是用来设定访问数据库时所使用的OLE DB Provider、数据库服务器所在机器的名称、用户登录名称和密码。而上面使用 ADO控件访问数据库的例子中已经创建了这个连接字符串,可以直接复制。有些读者把这个连接字符串硬记了下来,实际上并没有这个必要,因为这个连接字符串比较复杂,如果有一段时间没有编写程序,可能就会忘记宫的写法,另外,利用于工书写这个字符串很容易出错,所以笔者建议,即使读者是用VC作开发,也要在机器上安装上VB的开发环境,这样需要时可以在VB中利用 ADO控件获得数据库连接宇符串,然后直接复制到 VC程序中使用即可。
接下来,如例 20-22所示代码调用连接对象的 Open函数建立连接。然后,利用连接对象的Execute方法给记录集对象赋值,该方法将执行一条SQL语句,本例就是简单地从 authors表中查询数据。
当执行完SQL语句之后, authors表中所有数据都将以数据集对象的形式提供。为了访问这些数据,可以用循环语句来实现。只有到达记录集的末尾(即 rst.EOF为真)时,此循环才结束,否则将不断地读取记录集对象中的数据,本例中是利用记录集对象通过索引取出 au_lname宇段的数据,并将数据放置到列表框中。这里读者一定要注意,在取出记录集数据后,必须调用记录集对象的MoveNext函数。因为在访问数据库中表的数据时,在内部实际上是通过一个游标进行操作的。我们可以把游标看作是一个指针,当这个指针指向某一行,我们就可以取出这一行的数据。如果指针没有移动,那么在每次循环时取的数据都是同一行的数据,当然这个循环就变成了一个死循环,因为它始终不会到达记录集的末尾。当调用 MoveNext函数后,这个游标指针将被移动到下一行记录上,下一次循环时取出的数据就是下一行的数据。这样,当到达记录集末尾时, rst.EOF为真,循环终止。我们要记住的是,对数据库的访问总是按行进行的。
运行当前的VB程序,并单击Cornmandl按钮,这时在列表框中就会显示出所有的作者姓名信息。程序界面如图20.31所示。
第 20章 HOOK
A画画l
White ... Green Carson O'Leary Straight Smith Bennet Dull Gringtesby Lock sl巴y Greene Blotchet.Halls ."'J
一一---~
I .
cam回回1
图 20 .3 1在 VB中利用 ADO对象访问数据库的程序运行结果
2.利用 Recordset对象执行 SQL语旬
上面是利用 Connection对象执行 SQL语旬,从而得到记录集对象,也可以直接利用记录集对象去执行一条 SQL语句。这时就需要使用 new操作符产生一个 Recordset对象,并将该对象的 ActiveConnection属性设置为当前的连接对象,然后就可以调用该记录集对象的 Open方法去打开数据库连接,井执行一条查询语旬,这时的 Commandl按钮单击事件的代码如例 20-23所示。
锣IJ 20-23
private Sub Command1_C1ick()
Dim conn As New ADODB .Connection
Dim rst As New ADODB . Recordset
conn. ConnectionString = "Provider=SQLOLEOB.1; Password=sa; Persist Securi ty 工 nfo=True ; User ID=sa ; In工 tial Catalog=pubs " conn. Open
'Set rst = conn.Execute ("select * from authors " )
rst . ActiveConnection = conn
rst .Open "select * from authors "
00 Until rst . EOF
List1.Addltem rst( "au_lname")
rst .MoveNext
Loop
End Sub
3.利用 Command对象执行 SQL语旬
ADO中还有一个核心对象: Command对象,现在就利用此对象来访问数据,这时, Commandl按钮单击事件的代码如例 20-24所示。
,
762 I胁"口
例 20-24
Private Sub Commandl_Click()
oim conn As New ADODB.Connection
Oim rst As New ADOOB.Recordset
oim crnd As New ADODB.Command
conn. ConnectionString = "Provider=SQLOLEDB. 1; Password=sa; Persist Security 工 nfo=True; User ID=sa;工 nitial Catalog=pubs" conn.Open
.
'Set rst conn.Execute(而 select * frorn authors")
'rst.ActiveConnection = conn
'rst.Open "select * frorn authors"
cmd.ActiveConnection = conn
crnd.CommandText = "select * frorn authors"
Set rst = crnd.Execute
.
00 Until rst.EOF
List1.AddItem rst("au-lname")
rst.MoveNext
Loop
End Sub
从上述例 20-24所示代码中,我们可以看到,利用 ADO的 Command对象访问数据库时,首先需要设置该对象的 ActiveConn即tion属性,接着设置它的命令文本 (CommandText)属性,可以将该属性设置为一条有效的 SQL语句。然后调用 Command对象的 Execute方法执行该 SQL语句,并将结果赋给记录集对象,也就是将查询结果放到记录集对象中。其他代码同前面的方法一样。
通过上面内容的介绍,我们可以发现,在 VB中利用 ADO访问数据库是非常灵活的。上述几种用法没有优劣之分,在实际编程时主要是根据具体的使用情况来选择-种实现方法,例如如果需要重复地执行一条 SQL语句时,那么最好使用 Command对象来实现。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -