65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 ADODB 访问数据源

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.11/5 (7投票s)

2007 年 7 月 2 日

CPOL

3分钟阅读

viewsIcon

35427

downloadIcon

1264

使用此 DLL,任何人都可以访问 Oracle、SQLServer、Access 三种数据库。

引言

各位,

我这几年一直从事需要访问不同数据库的项目。当我第一次接到项目时,我发现访问数据库对我来说非常困难,因为我对 ADO 和 COM 的使用并不了解。所以,我正在为那些刚接触 ADO 并通过“msado15.dll”(即通过 COM)访问 ADO 的人编写这篇文章。

我创建了一个 DLL 来以简化的方式完成这项工作。基本上,我已经将“msado15.dll”的一部分封装到了我的类中,以便于访问。

背景

什么是ADO?

在 C++ 中编程 OLEDB 是很容易的。但是,对于像 Visual Basic 这样不支持指针和许多 C++ 功能的语言来说,实现 OLEDB 是困难的。ADO 是一个基于 COM 接口的 OLEDB 的高级接口

ADO 对象。

ADO 模型基本上有 3 种类型的对象:-

1. 连接
2. 命令
3. 记录集

Connection 对象使用连接字符串与数据源建立连接,连接字符串因数据库而异(您可以在 https://codeproject.org.cn/database/connectionstrings.asp 链接中找到连接字符串),
该连接字符串被传递给 Connection 对象以建立与数据源的连接。

Command 对象用于执行 SQL 命令、查询和存储过程。当执行查询时,它会返回存储在 Recordset 对象中的结果。记录集中的数据可以被操作
然后更新到数据库。

使用代码

使用此 DLL,您可以轻松地访问数据源。

使用此 DLL 访问数据源有 3 个基本步骤,如下所示:-

  • 连接到数据源
  • 执行 SQL 命令
  • 返回 Recordset 对象

有两个独立的类:-

  • Conn_ADO 类主要用于连接(您可以连接 Oracle/MS Access/MS SQLServer 三种数据库)、断开连接、获取行集、关闭行集以及执行 SQL(用于执行不返回行集的 SQL,如 insert、update、delete 等)
  • ADO_ROWSET 类可用于访问行集,使用 Get* 等函数检索特定字段的值,并使用 Move* 等函数遍历行集。

以下是一些可以使用此 DLL 的步骤:-

  • 连接到数据源
  • // HRESULT hResult = objADO.ConnectDatabase(m_cstrDSN.AllocSysString()

    // ,m_cstrUserName.AllocSysString(),m_cstrPass.AllocSysString(),Conn_ADO::connOracle);

    // 连接到 Oracle 数据库

    // if(hResult != 0)

    // {

    // AfxMessageBox("数据库未连接");

    // }

    // else

    // {

    // AfxMessageBox("数据库已连接");

    // }

    您也可以使用 connSQLServer、connAccess 连接到这些数据库。

  • 执行 SQL 命令并返回 Recordset 对象

// sQuery = "SELECT * FROM TABLE_NAME";

// objAdo.FetchRowSet(sQuery.AllocSysString(),&ado_row_set);

// if(ado_row_set.IsBeginOfFile() || ado_row_set.IsEndOfFile())

// {

// objADO.CloseRecordSet(ado_row_set);

// AfxMessageBox("表或视图不存在");

// return;

// }

// else

// {

// sCol_name = "COLUMN_NAME";

// ado_row_set.MoveToFirst();

// while(!ado_row_set.IsEndOfFile())

// {

// ArrColumns.Add(ado_row_set.GetStringValue(sCol_name.AllocSysString()));

// i++;

// ado_row_set.MoveToNext();

// }

// objADO.CloseRecordSet(ado_row_set);

// }

这里“objAdo”是 Conn_ADO 类的对象,“ado_row_set”是

ADO_ROWSET 类的对象。

您必须在您使用此 DLL 的项目中导入 msado15.dll,这是此 DLL 的限制,您可以在“c:\Program Files\Common Files\System\ADO\msado15.dll”找到 msado15.dll。

    关注点

    在编写 DLL 时,我不得不使用 COM 来访问数据源,所以如果您采用传统的方式使用 COM,您将不得不遵循许多步骤,如内存分配等。为了简化,我使用了智能指针,它完成了大部分工作,例如内存的分配和释放等。

    您还可以从代码中学习如何使用智能指针。

    另一个值得注意的有趣点是,您不仅可以使用此 DLL 进行 MFC,还可以以任何方式使用它,例如在不使用 MFC 的情况下使用,因为我使用了最基本的类型来进行函数的输入/输出。

    建议

    对于我可能遗漏的任何更改或对此 DLL 的改进,我们随时欢迎您的建议。

© . All rights reserved.