ADO(ActiveX Data Object的简称)是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口。ADO通过OLE DB提供访问和操作数据库服务器中的数据。ADO不仅可以访问关系型数据库,还可以访问非关系型数据库。同时由于OLE DB是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,从而大大提供了访问速度。与众多的数据库编程接口比较,ADO具有易于使用、速度快、内存支出少和磁盘遗迹小等优点。
但由于Microsoft并没有提供有关ADO的类,更不幸的是微软所提供的ADO文档几乎没有关于Visual C++的内容,这使得Visual C++程序开发人员要想利用ADO访问数据库相对比较麻烦。然而这又是每个Visual C++程序员不可回避的问题。解决这个问题的比较可行的办法就是自己编写这个类。本文将介绍如何具体编写自己的ADO类。
(1) 在使用ADO前必须使用#import引入ADO库文件,其中ADO库文件的路径视实际情况而定,同时为了避免常数冲突,通常将常数EOF改名为adoEOF。
#import "c:/program files/commonfiles/system/ado/msado15.dll" no_namespace rename ("EOF","adoEOF") |
(2) 在使用ADO之前还必须初始化OLE库。Visual C++ .net已经在CWinApp::InitInstance()中对OLE库进行了初始化。但是如果使用的Visual C++ 6.0,则必须初始化OLE库。
if (!AfxOleInit()) |
(3) ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句。_CommandPtr返回一个记录集,它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。_RecordsetPtr是一个记录集对象,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。创建Connection对象和Recordset对象方法如下:
_ConnectionPtr m_pConnection; // 连接接口 |
(4) 连接不同数据库。参数sConnection为连接属性设置标准。它随数据源类型的不同而变化。以下是其常见值:
1. 访问ODBC数据:
"Provider=MSDASQL;DSN=dsnName;UID=userName;PWD=userPassword;"
2. 访问ACCESS 97数据库:
"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=databaseName;User ID=userName;Password=userPassword;"
3. 访问ACCESS 2000数据库:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassword;"
4. 访问MS SQL数据库:
"Provider=SQLOLEDB;Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"
5. 访问ORACLE数据库:
"Provider=MSDAORA.1;Data Source=serverName;User ID=userName;Password=userPassword;"
inline BOOL ConnectDB(CString sConnection) |
(5) 查询:
BOOL Query(CString SqlCommand) |
(6) 修改记录:
_variant_t vNULL;
CString SqlCommand = "UPDATE TableName SET …[ WHERE…]";
m_pConnection->Execute((_bstr_t) SqlCommand, &vNULL, adCmdText);
(7) 添加记录:
_variant_t vNULL;
CString SqlCommand = "INSERT INTO TableName (…) VALUES (…)[ WHERE…]";
m_pConnection->Execute((_bstr_t) SqlCommand, &vNULL, adCmdText);
(8) 删除记录:
_variant_t vNULL;
CString SqlCommand = "DELETE FROM TableName WHERE …";
m_pConnection->Execute((_bstr_t) SqlCommand, &vNULL, adCmdText);
(9) 统计。参数SqlCommand的形式如下:
1. 统计纪录数:SELECT COUNT(*) FROM TableName[ WHERE…]
2. 统计字段总和:SELECT SUM FieldName FROM TableName[ WHERE…]
3. 统计字段平均值:SELECT AVG FieldName FROM TableName[ WHERE…]
4. 统计字段最大值:SELECT MAX FieldName FROM TableName[ WHERE…]
5. 统计字段最小值:SELECT MIN FieldName FROM TableName[ WHERE…]
inline _variant_t Statistics(CString SqlCommand) |