不使用向导创建使用者

下面的示例假定您向现有的 ATL 项目中添加 OLE DB 使用者支持。 如果要向 MFC 应用程序中添加 OLE DB 使用者支持,应运行“MFC 应用程序向导”,该向导创建所有必要的支持并调用执行此应用程序所需的 MFC 例程。

不使用“ATL OLE DB 使用者向导”添加 OLE DB 使用者支持:

  • 在 Stdafx.h 文件中,追加下面的 #include 语句:

    #include <atlbase.h>
    #include <atldbcli.h>
    #include <atldbsch.h> // if you are using schema templates
    

使用者通常以编程方式执行以下操作序列:

  • 创建将列绑定到局部变量的用户记录类。 在此示例中,CMyTableNameAccessor 是用户记录类(请参见用户记录)。 此类包含列映射和参数映射。 在用户记录类中,为在列映射中指定的每个字段声明数据成员;对于这些数据成员中的每一个,还声明一个状态数据成员和一个长度数据成员。 有关更多信息,请参见 向导生成的访问器中的字段状态数据成员

    备注

    如果您编写自己的使用者,则数据变量必须位于状态变量与长度变量之前。

  • 实例化一个数据源和一个会话。 决定要使用的访问器和行集合的类型,然后使用 CCommandCTable 实例化一个行集合:

    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 之后调用 ReleaseCommandCCommand::Close 中的代码示例说明如何调用 CloseReleaseCommand

  • 调用 CoUnInitialize 以取消初始化 COM。 这通常是在主代码中调用的。

    CoUninitialize();
    

请参见

参考

创建 OLE DB 使用者