📄 一致的数据访问技术adoole db .htm
字号:
a.通过ConnectionString、ConnectionTimeOut和Mode属性设置
连接串、超时信息、访问模式。
b.还可以设置CursorLocation属性以便指定使用客户端游标,以
便在客户程序中使用批处理修改方式。
c.设置连接的缺省数据库属性DefaultDatabase。
d.设置OLE DB提供者的属性Provider。
e.通过Open和Close控制Connection对象与物理数据源的连接。
f.通过Execute方法执行命令。
g.提供事务机制,通过BeginTrans、CommitTrans和RollbackTran
s方法实现事务控制。
h.通过Errors集合属性检查数据源的错误信息。
i.通过OpenSchema方法获取数据库的表信息。
Connection对象是ADO的基本对象之一,它独立于所有其他的对象
。如果我们要对数据库进行查询操作,既可以使用Execute方法,也可
以使用Command对象。使用Execute方法比较简便,但用Command对象可
以保存命令的信息,以便多次查询。
(2) Command对象 Command对象代表一个命令,可以通过其方法执
行针对数据源的有关操作,比如查询、修改等。Command对象的用法如
下:
a.通过CommandText属性设置命令串。
b.通过Parameters集合属性和Parameter对象定义参数化查询或
存储过程的参数。
c.通过Execute方法执行命令,可能的话,返回Recordset对象。
d.在执行命令之前,可通过设置CommandType属性以便优化性能。
e.可以通过Prepared属性指示底层的提供者为当前命令准备一个
编译过的版本,以后再执行时,速度会大大加快。
f.通过CommandTimeOut属性设置命令执行的超时值(以秒为单位)
。
g.可以设置ActiveConnection属性,为命令指定连接串,Command
对象将在内部创建C onnection对象。
h.可以设置Name属性,这样以后可以在相应的Connection对象上
按Name属性指定的方法名执行。
Command对象执行时,既可以通过ActiveConnection属性指定相连
的Connection对象,也可以独立于Connection对象,直接指定连接串,
即使连接串与Connection对象的连接串相同,Command对象仍然使用其
内部的数据源连接。
(3)Recordset对象 Recordset对象代表一个表的记录集或者命令
执行的结果,在记录集中,总是有一个当前的记录。记录集是ADO管理
数据的基本对象,所有的Recordset对象都按照行列方式的表状结构进
行管理,每一行对应一个记录(Record),每一列对应一个域(Field)。
Recordset对象也通过游标对记录进行访问,在ADO中,游标分为以下4种
:
静态游标提供对数据集的一个静态拷贝,允许各种移动操作,包括
前移、后移等等,但其他用户所做的操作反映不出来。
动态游标允许各种移动操作,包括前移、后移等等,并且其他用户
所做的操作也可以直接反映出来。
前向游标允许各种前向移动操作,不能向后移动,并且其他用户所
做的操作也可以直接反映出来。
键集(keyset)游标 类似于动态游标,也能够看到其他用户所做的
数据修改,但不能看到其他用户新加的记录,也不能访问其他用户删除
的记录。
Recordset对象的用法如下:
a.利用CursorType属性设置游标类型。
b.通过Open方法打开记录集数据,既可以在Open之前对ActiveCon
nection属性赋值, 指定Recordset对象使用连接对象,也可以直接在O
pen方法中指定连接串参数,ADO将创建一个内部连接,即使连接串与外
部的连接对象相同,它也使用新的连接对象。
c.Recordset对象刚打开时,当前记录被定位在首条记录,并且BOF
和EOF标志属性为F alse,如果当前记录集为空记录集,则BOF和EOF标
志属性为True。
d.通过MoveFirst、MoveLast、MoveNext和MovePrevious方法可
以对记录集的游标进行移动操作。如果OLE DB提供者支持相关功能的
话,可以使用AbsolutePosition、Absol utePage和Filter属性对当前
记录重新定位。
e.ADO提供了两种记录修改方式:立即修改和批修改。在立即修改
方式下,一旦调用U pdate方法,则所有对数据的修改立即被写到底层
的数据源。在批修改方式下,可以对多条记录进行修改,然后调用Upda
teBatch方法把所有的修改递交到底层数据源。递交之后,可以用Stat
us属性检查数据冲突。
Recordset对象是ADO数据操作的核心,它既可以作为Connection
对象或Command对象执行特定方法的结果数据集,也可以独立于这两个
对象而使用,由此可以看出ADO对象在使用上的灵活性。
上面3个对象都包含一个Property对象集合的属性,通过Property
对象可使ADO动态暴露出底层OLE DB提供者的性能。由于并不是所有
的底层提供者都有同样的性能,所以ADO 允许用户动态访问底层提供
者的能力。这样既使得ADO很灵活,又提供了很好的扩展性。
ADO的其他集合对象及其元素对象,都用在特定的上下文环境中,
比如Parameter对象一定要与某个Command对象相联系后,才能真正起
作用。而另外三个对象Field、Error和Property对象只能依附于其父
对象,不能单独创建这些对象。
三、在多种语言中使用ADO
以上介绍了ADO的对象模型,现在我们来讨论如何在不同的语言环
境中使用ADO对象。
因为ADO是作为自动化组件程序实现的,所以我们可以在任何支持
COM和自动化特性的语言环境中使用ADO,比如Visual Basic、Visual
C++、ASP和Java等等,下面分别加以介绍。
1. 在Visual Basic应用中使用ADO
Visual Basic应用在设计模式和运行模式下都可以创建和使用自
动化对象,在设计模式下,像ADO这样的对象库可以作为内部对象来使
用,我们只需在"Project"菜单下的"Ref erences"命令弹出的对话框
中选中ADO对象库"Microsoft ActiveX Data Objects Libra ry",于
是我们就可以在程序中直接声明或新建ADO对象,举例如下:
Dim cn as New ADODB.Connection
Dim cmd as New ADODB.Command
Dim rs as New ADODB.Recordset
可以看出,在设计时使用ADO对象非常方便,而且Visual Basic设
计环境中提供的对象浏览器(Object Browser)功能允许用户很方便地
查看ADO对象的属性和方法。
我们也可以在运行时创建自动化对象,使用Visual Basic的Creat
eObject函数可以创建任意的自动化对象,由于ADO中只有Connection
对象、Command对象和Recordset对象可以被独立创建,所以我们也只
能创建这3种对象,举例如下:
Dim cn
Set rs=CreateObject("ADODB.Connection ")
Dim cmd
Set rs=CreateObject("ADODB.Command")
Dim rs
Set rs=CreateObject("ADODB.Recordset")
不管是设计模式还是运行模式,调用ADO对象的属性和方法都非常
简单,直接调用即可。
2. 在ASP的VBScript中使用ADO
ADO对象也可以用于HTML和Active Server Page的VBScript脚本
代码,VBScript脚本代码与Visual Basic的代码很类似,它们内嵌在HT
ML或ASP文件的特定标记对内部。但VB Script引擎比Visual Basic的
设计环境或运行库在功能上还是要弱一些,首先,在VBScri pt代码中,
没有与设计环境类似的用法,VBScript引擎不能装入ADO类型库,所以
不能使用New操作符创建ADO对象,但可以使用CreateObject函数创建
对象;其次,ADO对象库中用到的常量只能通过包含文件引入,随ADO一
起提供的Adovbs.inc文件包含所有ADO常量的定义,我们可在脚本代码
中直接包含此文件。
因此,为了在VBScript代码中使用ADO,首先要包含Adovbs.inc文
件,然后使用Create Object函数创建ADO对象,以后就可以调用这些对
象的属性或方法了。下面的例子显示了在ASP文件中用ADO列出数据表
中所有作者的姓名和职称,代码如下:
Using ADO in a Visual Basic Script Web Page
Using ADO in a Visual Basic Script
Web Page
myConnection.Open "DSN=MySamples;UID=sa"
SQLQuery = "select AuthorName, Title from AuthorDB"
set rs = myConnection.Execute(SQLQuery)%
WIDTH=200
Title ID
SIZE=1
Title
"arial narrow" size=1
"arial narrow" size=1
3. 在Visual C++中使用ADO
在Visual C++中使用ADO有多种方法,第一种方法是我们使用CoCr
eateInstance函数创建ADO对象,并得到对象的IDispatch接口指针,然
后调用其Invoke函数,用这种方法需要我们自己处理参数和返回值,AD
O提供了Adoid.h和Adoint.h头文件分别定义了ADO对象的CLSID和接口
ID;第二种方法是利用#import编译指示符(在Visual C++ 5.0及以后
的版本中可以使用),可以方便地使用ADO对象;第三种方法是利用MFC(
Microsoft Foundation C lass)库提供的IDispatch接口封装类COleD
ispatchDriver创建和调用ADO对象。
下面的代码显示了在Visual C++创建数据源连接的过程:
GUID connectionCLSID;
HRESULT hResult = ::CLSIDFromProgID(L"ADODB.Connection",
&connectionCLSID);
if (FAILED(hResult))
{
......
}
IDispatch *pDispatch = NULL;
hResult = CoCreateInstance(connectionCLSID, NULL,
CLSCTX_SERVER, IID_IDispatch, (void **)&pDispatch);
if (FAILED(hResult))
{
......
}
COleDispatchDriver driver;
driver.AttachDispatch(pDispatch, FALSE);
TRY
{
BYTE parms =VTS_BSTR;
driver.InvokeHelper(0xa, DISPATCH_METHOD,
VT_EMPTY, &hResult, parms,L"Provider=SQLOLEDB;
User ID=sa;Password=;" L"Initial Catalog=LEAVES;
Data Source=NetTestServer");
}
END_TRY
driver.DetachDispatch();
......
4. 在Java中使用ADO
在Java程序中可以引入ADODB类,然后声明ADO变量,也可以使用ne
w操作符创建ADO变量。下面的代码说明了如何在Java中打开与数据源
连接:
import msado10.*;
_Connection m_conn = null;
_Recordset m_rs = null;
_Command m_cmd = null;
void OpenConnection()
{
String s;
Properties properties;
try
{
properties = m_conn.getProperties();
m_conn.Open("dsn=MySamples", "sa", "");
properties = null;
}
catch (Exception e)
{ System.out.println("\nUnable to make a connection \n")
;
}
}
(作者地址:北京大学计算机科学技术研究所,100871,收稿日期:1
999.02)
</PRE><br><br>
</DIV></div></div>
<script src='../../../get_readnum.asp?id=
6411
'></script>
</center></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -