45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何使用ADO访问数据库?

如何使用ADO访问数据库?

2016-08-26 15:57:58 来源:www.45fan.com 【

如何使用ADO访问数据库?

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())
{
AfxMessageBox(“初始化OLE库失败”);
}

(3) ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句。_CommandPtr返回一个记录集,它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。_RecordsetPtr是一个记录集对象,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。创建Connection对象和Recordset对象方法如下:

_ConnectionPtr m_pConnection; // 连接接口
_RecordsetPtr m_pRecordset;// 记录集指针
HRESULT hr;
hr = m_pConnection.CreateInstance("ADODB.Connection");
if (!SUCCEEDED(hr))
{
AfxMessageBox("创建Connection对象失败");
}
hr = m_pRecordset.CreateInstance("ADODB.Recordset");
if (!SUCCEEDED(hr))
{
AfxMessageBox("创建Recordset对象失败");
}

(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)
{
try
{
m_pConnection->Open(_bstr_t(sConnection), "", "", adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox("连接数据库失败,错误信息:%s", e.ErrorMessage());
return FALSE;
}
return TRUE;
}

(5) 查询:

BOOL Query(CString SqlCommand)
{
try
{
m_pRecordset->Open((_bstr_t) SqlCommand, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
catch (_com_error* e)
{
AfxMessageBox(e->ErrorMessage());
return FALSE;
}
return TRUE;
}

(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)
{
_variant_t vNULL;
_RecordsetPtr pRecordset;
pRecordset = m_pConnection->Execute((_bstr_t) SqlCommand, &vNULL, adCmdText);
_variant_t vCount = pRecordset->GetCollect((_variant_t) (long) 0);
pRecordset->Close();
Recordset.Release();
return vCount;
}


本文地址:http://www.45fan.com/a/question/67994.html
Tags: 访问 数据库 ADO
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部