高性能 OLE DB 库:ADO 的便捷性,OLE DB 的强大功能






2.50/5 (6投票s)
2001年12月3日
3分钟阅读

84565

3358
OLE DB 扩展类的介绍。
概述
我们大多数人都知道 OLEDB 是提供 Windows 平台快速数据访问的最新数据库技术。然而,许多 C++ 程序员倾向于避免使用原始 OLEDB,而在开发过程中更喜欢使用 ADO。这主要有两个原因。首先,OLEDB 接口(COM 接口)非常复杂且文档稀疏。它们既不方便,也不对开发者友好。所以,我们别无选择:使用 ATL 消费者模板来处理 OLEDB。这些模板类功能强大且性能高。但是,它们缺乏 ADO 提供的灵活性和丰富的功能。很多时候,人们不得不诉诸 ADO 来执行某些数据库操作,例如将行集绑定到数据网格或其他控件。这是因为没有简单的方法可以将 OLEDB 行集绑定到控件。
本文介绍了一组从 ATL 消费者模板类扩展而来的 OLEDB 类。虽然这些类提供了类似 ADO 的附加灵活性和功能,但它们仍然保留了消费者模板类的强大功能和性能。在这里,本文将只介绍我们为商业产品开发构建的完整库中的一个子集。
[1] 连接对象:CSypODLConnection
在 OLEDB 消费者模板中,您必须处理两个类来维护数据库连接和事务:CDataSource 和 CSession。这有时会令人困惑。相反,我们创建了一个名为 CSypODLConnection 的单一类,它非常类似于 ADO 中的 Connection 对象。该类结合了数据库连接和事务维护的功能。这个类的使用非常简单。
CSypODLConnection m_Cnn; // Define connection object m_Cnn.Open("CONNECTION STRING", "UID", "PWD"); // Connnect to database
您还可以像 ADO 连接一样在此对象上使用事务。
m_Cnn.StartT ransaction(); // Start Transaction -- Code --- m_Cnn.Commit(); // Commit changes
同样,与 ADO 连接对象一样,我们提供了 Execute 方法来执行操作查询。
m_Cnn.Execute("DELETE FROM Customer WHERE CustomerID = 5");
[1] RecordBase、Exception 和 Error 类
类似地,我们还创建了一个名为 CSypODLRecordset 的记录集类,它封装了 CCommand 和 CTable 消费者模板类。那些使用过这些消费者模板类的程序员都知道,在每次方法调用后检查 HRESULT 值是多么的繁琐。不仅每次都检查 HRESULT 值耗时,而且从 IErrorInfo 接口获取错误也非常困难。为了解决这个问题,我们创建了两个类:一个异常类和一个错误处理类。因此,代码变得非常简单,如下所示。
CSypODLRecordBase<CAccessor<CSalesManTableAccessor> > m_Rs; // Process data now try { m_Rs.Open("SalesMan", &m_Cnn, 1); // 1 indicates table while(!m_Rs.IsEOF()) { AfxMessageBox(m_Rs.GetAccessor()->m_SalesManName); m_Rs.MoveNext(); } m_Rs.Close(); } catch(CSypODLException e) { e.DisplayError(); return; }
本质上,如果您已经了解 ADO,那么这个库将很容易理解和使用。所以,如果您想让您的应用程序获得闪电般的速度和高性能,请使用这些类。
实际上,库中有如此多的特性和类,我们可以写一本书来介绍它。然而,由于空间和范围的限制,我敦促用户阅读代码,代码本身是自explanatory的。此外,我们在此包含的类只是一个完整、独立、功能齐全的库的一个子集。我还建议您研究包含的示例,看看使用这些类是多么容易。如果您需要完整的文档,您可以直接与我联系。
已知的缺点和限制
一些 OLEDB 提供商似乎存在 bug,可能会影响该库的某些功能。出于某种原因,Update 方法和书签在某些提供商那里会失败。此外,该库主要使用 JET 和 OleDb provider for ODBC 进行过测试。
如果您决定使用此代码
您可以根据以下限制自由使用或修改此代码。
- 您必须在您的关于框或文档的某个地方提及我们,简单的“部分代码由…Sypram Technology 提供”即可。如果您不能(或不想)提及我们,请亲自与 Sypram Technology(www.sypram.com)的一位联系人联系。
- 请勿从源代码和头文件中删除版权声明。
- 请勿将此代码或文章的任何部分发布到其他网站。
- 我们保留更新此页面以及提供的源代码的专有权利。请在相邻页面发布您的修改和补充。我们可能会将您的修改和/或补充添加到未来版本的文章和源代码中,并对您的工作进行适当的署名。
如果您有任何其他问题或需要进一步的帮助,请通过 GNaik@SypramTech.com 或 GhanNaik@Yahoo.com 与我联系。