1、在 Visual C+中使用 ADO 存取数据库来源: 作者:evget - 转载 时间:2004-07-13 点击:880 次 在 VC 中使用 ADO(ActiveX Data Objects)。Visual C+提供了多种数据库处理方法,我们既可以直接从 DAO SDKs(Data Access Objects Software Development Kits)或 ODBC SDKs(Open Database Connectivity)中调用数据库 API 函数,也可以选择使用MFC(Microsoft Foundation Class Library),即使用 MFC DAO 和
2、MFC ODBC 类来处理数据库 API。1、导入 ADO 接口VC 编译器有这样一个特性:它可以读出 COM 类型库(.tlb 文件),并提取其中声明的有关接口的类型库的详细资料,Microsoft 的#import 指令即可完成此工作。因此,为使 C+程序进入 ADO 接口,我们用 Visual Studio 创建了一个空的 Win32 Consol Project 之后,在头文件中加入下面的一行代码:#import “D:Program FilesCommon FilesSYSTEMADOmsado15.dll“ no_namespacerename(“EOF“,“rsEOF“)卧龙传说
3、提醒:该行代码应在同一行上,不能断行,这里只是版面的缘故。因为它指明了 msado15.dll 的具体位置。用户也可以在自己的 Visual Studio 6 的“Tools”菜单中选择“OLE/COM Object Viewer”,打开 OLE/COM 对象视图,通过“File|TypeLiB”打开上面路径中的 msado15.dll,查看该类型库的详细信息。2、创建 ADO 连接类(景玲一身淑女打扮)正确地导入类型库信息后,就可以声明一个 ADO Connection 对象类。该对象可以提供许多方法,在本文中我们只进行简介,仅创建了 3 个最有用的方法,即:Open()、Execute()
4、和 Close()。Open()方法打开一个数据库连接;Execute()方法对该数据库执行一个 SQL 请求并返回一组记录值;Close()方法关闭一个已打开的对象。class CADOConnection _ConnectionPtr m_Con;public:/ member functionsCADOConnection();CADOConnection();bool Open(char *DSN,char *u_id,char *pass);bool Close(void);_RecordsetPtr Execute(char *sqlquery);该段代码中,_Connection
5、Ptr 定义了一个 ADO 对象,用变量 m_Con 来存储当前打开的对象的指针;而 Execute()方法返回了一组记录的指针,我们用_RecordsetPtr 来定义。3、ADO 对象的实现(帅哥王牛向大家挥挥手)ADO 依赖 COM 来实现。因此在我们的 CADOConnection 开始使用 ADO 对象之前,我们应该先对 COM 进行初始化,它可以在 WinMain()中或其他程序段中实现。这里,我们把它放在类构造器中。如下:CADOConnection:CADOConnection() / initialize COMCoInitialize(NULL);/ holds curre
6、nt connectionm_Con=NULL;因为在对象创建的时候,没有任何数据库被打开,所以应设置 m_Con 为空。CADOConnection:Open()方法需要 3 个参数:被打开的 DSN(ODBC Data Source Name,即 ODBC 数据源)、指定的用户名及口令。如果检测到一个空的 DSN,Open()将创建一个连接对象的实例,如下面的代码所示:HRESULT hCon;_ConnectionPtr con = NULL;/ .hCon=con.CreateInstance(_uuidof(Connection);if(hCon != S_OK)/.COM 组件对象
7、有一个惟一的标识,称为 CLSID。_uuidof 机制利用对象的名称返回它的 CLSID,而 Open()通过它调用_com_ptr_t 模板类中的 CreateInstance()方法。COM 的方法总是返回一个 HRESULT,如果成功,它应该为 S_OK。若 ADO Connection 对象创建成功,Open()就使用 DSN、用户名、口令组成连接字串来打开数据库,接下来 Open()再调用 ADO Connection 对象的 Open()方法:HRESULT result =con-Open(_bstr_t(constr),“,“,0);卧龙传说提醒:现在 con 是一个非空的指
8、针了。ADO 对象的第一个参数是连接字串;第二个和第三个参数分别是用户名和口令,可以为空;最后一个参数指明打开是的选项,设置为 0。如果 Open()调用成功则返回 TRUE,否则返回 FALSE。CADOConnection:Execute()主要对已经打开的数据库执行一个 SQL 请求,并返回一组记录值。代码实现如下:_RecordsetPtr CADOConnection:Execute(char *sqlquery) / we should have a connection open, right ?if (m_Con=NULL)return NULL;_variant_t rec_
9、affected;return m_Con-Execute(_bstr_t(sqlquery),&rec_affected,0);当检测到一个打开的数据库连接,该代码就执行 Execute()方法。它的第二个参数是请求返回的一组记录数据的指针。CADOConnection:Close()只是简单地关闭一个打开的数据库连接。bool CADOConnection:Close(void) if (m_Con=NULL)return false;else HRESULT hr=m_Con-Close();m_Con=NULL;return (hr=S_OK?true:false); 最后,再介绍一下
10、 CADOConnection 类中重要的析构函数:CADOConnection:CADOConnection()/ close connection, if not yet closedif (m_Con)m_Con-Close();m_Con=NULL;/ VIMP !/ un-initialize COMCoUninitialize();析构函数的工作是在用户退出该连接类的时候,检查该对象是否仍处于打开状态。如果是,它首先应被关闭,即设置指向活动连接的指针变量为 NULL;最终,在构造函数中被初始化的 COM 运行环境,将调用 Win32 的 CoUninitialize()方法结束。本文的目的就是阐明如何创建 VC 的类,使之在使用 ADO COM 对象时更为方便。当然,同样的概念也适用于其他类型库中的 COM 对象。