不使用向导创建使用者
下面的示例假定要向现有 ATL 项目添加 OLE DB 使用者支持。 若要向 MFC 应用程序添加 OLE DB 使用者支持,应运行 MFC 应用程序向导,这会创建所有必要的支持,并调用执行应用程序所需的 MFC 例程。
若要在不使用 ATL OLE DB 使用者向导的情况下添加 OLE DB 使用者支持,请执行以下操作:
在 pch.h 文件中,追加以下
#include
语句:#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
使用者通常以编程方式执行以下一系列操作:
创建将列绑定到本地变量的用户记录类。 在此示例中,
CMyTableNameAccessor
是用户记录类(请参阅用户记录)。 此类包含列映射和参数映射。 在用户记录类中为你在列映射中指定的每个字段声明数据成员;对于每个数据成员,还声明状态数据成员和长度数据成员。 有关详细信息,请参阅向导生成的取值函数中的字段状态数据成员。注意
如果你编写自己的使用者,数据变量必须位于状态变量和长度变量前面。
实例化数据源和会话。 确定要使用什么类型的取值函数和行集,然后使用 CCommand 或 CTable 实例化行集:
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor>>
调用
CoInitialize
来初始化 COM。 调用是在主代码中进行。 例如:HRESULT hr = CoInitialize(NULL);
调用 CDataSource::Open 或其变体之一。
打开与数据源的连接,打开会话,然后打开并初始化行集(如果是命令的话,还要执行它):
hr = ds.Open(); hr = ss.Open(ds); hr = rs.Open(); // (Open also executes the command)
(可选)使用
CDBPropSet::AddProperty
设置行集属性,并将它们作为参数传递给rs.Open
。 有关如何完成此操作的示例,请参阅使用者向导生成的方法中的“GetRowsetProperties
”。现在可以使用行集来检索/控制数据了。
完成应用程序后,关闭连接、会话和行集:
rs.Close(); ss.Close(); ds.Close();
如果使用的是命令,建议在
Close
后面调用ReleaseCommand
。 CCommand::Close 中的代码示例展示了如何调用Close
和ReleaseCommand
。调用
CoUnInitialize
来取消初始化 COM。 调用是在主代码中进行。CoUninitialize();