Welcome

首页 / 软件开发 / C++ / 介绍一个增强的数据库类CDataSet

介绍一个增强的数据库类CDataSet2008-02-26因为MFC完全支持数据库应用程序的开发,所以大多数数据库应用都使用CDatabase和CRecordset类,并且类向导(Class Wizard)提供了快速简易的方式来使用这两个类。有一点不足的就是当应用程序涉及到多表数据库时,类向导将产生大量的关于记录集的源码文件使得工程给人的感觉很臃肿混乱。

本文介绍如何使用一个模板记录集类来降低类向导所产生的记录集文件的数量,同时增强记录集类(CRecordset)的功能。这个模板记录集类叫做:CDataSet。它的主要目的是降低代码量,为数据对象数组提供一个接口。

CDataSet类定义如下:

CDataSet 头文件
template class CDataSet : public CRecordset
{
public:
CDataSet(LPCSTR Table, CDatabase* pdb);
T m_Data; // Attached object
CString m_DefaultSQL; // Default SQL SELECT statement
CString m_DefaultSort; // Default SQL ORDER BY clause
CString m_DefaultFilter; // Default SQL WHERE clause
// Operations
public:
virtual BOOL Search(LPCSTR Filter, LPCSTR Sort = NULL, BOOL bFail = FALSE);
virtual BOOL DirectSearch(LPCSTR Filter, LPCSTR Sort = NULL, BOOL bFail = FALSE);
virtual void LoadAll(CArray& A, int N = 0);
virtual void SaveAll(CArray& A);
virtual void Load(T& Data) { Data = m_Data; }
virtual void Store(T& Data);
// Implementation
protected:
virtual CString GetDefaultSQL() { return m_DefaultSQL; }
virtual void DoFieldExchange(CFieldExchange* pFX);
};

这个模板有两个参数:一个是数据对象类,另一个是绑定字段的数量。数据对象类由一组成员变量组成,对应着不同的数据库表的字段,例如: struct DataObj {
CString Var1;
CString Var2;
int Var3;
float Var4;

// ......

// 成员函数
};