ADO连接

本文详细介绍了ADO连接的准备工作,包括引入msado15.dll,以及ADO中的_ConnectionPtr、_CommandPtr和_RecordsetPtr接口。接着,展示了如何创建ADO连接,如通过ConnectionString和Open函数,以及针对不同Access版本的连接字符串示例。最后提到了判断连接状态的方法,如使用ConnectionTimeOut属性设置超时和通过State属性检查连接是否打开。
摘要由CSDN通过智能技术生成

ADO连接详解

1.  准备工作

首先要引入msado15.dll以便编译器能够识别,引入方法是: 

#import "C:\program files\commonfiles\system\ado\msado15.dll"no_namespace rename("EOF", "adoEOF")  

注意,末尾没有分号。

引入的位置是stdafx.h

由于ADO是一个COM组件,所以在调用他们之前要初始化COM环境。初始化OLE,在方法**App::InitInstance()中进行(必须在DoModal()之前),
MFC中初始化方法是调用AfxOleInit()函数
MFC环境使用
::CoInitialize(NULL);
然后在退出的时候加
::CoUninitialize(); 
当然也可以在你调用前初始化。 初始化后,系统会生成两个文件:msado15.tlhado15.tli,这些都是COM组件所需的。

引入后,便可以使用ADO库中的接口,分别是:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口,三个接口分别介绍如下:

_ConnectionPtr接口:返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。如果使用 _ConnectionPtr接口返回一个记录集不是一个好的方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用 _ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordserPtr时不需要。
    _CommandPtr
接口:返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局 _ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。
    _RecordsetPtr
接口:是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给 _RecordsetPtrconnection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。

2.  创建ADO连接

首先创建_PconnectionPtr对象m_pConnection采用如下方法:

m_pConnection.CreateInstance(__uuidof(Connection));此处括号里也可以这样,两者都能通过// ("ADODB.Connection");

调用Open函数打开连接

m_pConnection->Open((_bstr_t)strSQL,"","",adModeUnknown); 

其函数原型为:

HRESULTConnection15::Open ( _bstr_tConnectionString,_bstr_tUserID, _bstr_t Password, long Options ) 

其中参数如下:

ConnectionString,针对不同的数据库,字段不同;

UserID,即用户名;

Password,密码;

optinons,参数分别如下所示: 

ConnectionString参数:

Acess2003strSQL=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=**.mdb

Acess2007strSQL=”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=**.accdb

Acess2010strSQL=”Provider=Microsoft.ACE.OLEDB.14.0;Data Source=**.accdb

Options参数:

Constant

Value

Description

adModeUnknown

0

Permissions have not been set or cannot be determined.

adModeRead

1

Read-only.

adModeWrite

2

Write-only.

adModeReadWrite

3

Read/write.

adModeShareDenyRead

4

Prevents others from opening a connection with read permissions.

adModeShareDenyWrite

8

Prevents others from opening a connection with write permissions.

adModeShareExclusive

12

Prevents others from opening a connection.

adModeShareDenyNone

16

Allows others to open a connection with anypermissions.

adModeRecursive

0x400000

Used withadModeShareDenyNone,adModeShareDenyWrite, oradModeShareDenyRead to set permissions on all sub-records of the current Record.

 0为默认,表示许可权未设置

3.  判断连接状态

Connection对象除Open()方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOutStateConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:

m_pConnection->ConnectionTimeout = 5;///设置超时时间为5

m_pConnection->Open("Data Source=adotest;","","",adModeUnknown);

State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:

if(m_pConnection->State)

m_pConnection->Close(); ///如果已经打开了连接则关闭它

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值