使用 ADODB 访问数据源






2.11/5 (7投票s)
使用此 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 的步骤:-
- 连接到数据源
-
执行 SQL 命令并返回 Recordset 对象
// 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 连接到这些数据库。
// 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 的改进,我们随时欢迎您的建议。