vc++实现反射式数据库模版(4.实现数据库模版)

来源:互联网 发布:简单视频编辑软件 编辑:程序博客网 时间:2024/04/26 06:19

接上篇vc++实现反射式数据库模版(3.序列化、反序列化与消息映射)

 

前三节参照MFC实现了数据模型的序列化工作。这一节就利用ADO完成数据库模版,这里实现增加和查询功能,有兴趣可以自己参照完成删除和更新。

 

由于查询结果可能是一个集合,这里我们把数据模型设计成链表,只需在基类增加TDObject* m_pNextObject;指向下个数据模型的指针。

 

参照软件设计原则,我们把业务对象和业务逻辑分开。建立TDLogic做为我们的数据操作模版。

 

#pragma once

#include"TDObject.h"

 

//连接字符串

#define CONNECTIONSTRING"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=TDDataBase;Data Source=."

class TDLogic

{

public:

    TDLogic(void);

    ~TDLogic(void);

    //增加数据

    bool Insert(TDObject* pObject);

 

    //查询数据,pObject保存查询条件

    TDObject* Select(TDObject* pObject);

private:

    //ADO

    _ConnectionPtr m_pConnection;

    _RecordsetPtr m_pRecordset;

};

使用时链接字符串改成自己的,我们这里数据库名为TDDataBase。存在两个表:TDCar与TDPerson。根据各自对应关系完成数据库。



id这里做为自增主键(注意标识规范选择是)。

 

使用时我们只需要将数据对象传递进去就可以了,十分方便。

 

                            //初始化com

                            CoInitialize(NULL);

                            //测试

                            TDPersonp;

                            p.set_name("小明");

                            p.set_age(10);

                            TDCarc;

                            c.set_name("奔驰");

                            c.set_price("500000.5");

 

                            /*p.show();

                            c.show();*/

                            TDLogiclogic;

                            //增加信息

                            logic.Insert(&p);

                            logic.Insert(&c);

                            //查询信息

                            PrintSelect(&p);

                            PrintSelect(&c);

 

                            CoUninitialize();

 

PrintSelect是为了方便封装的一个测试函数,用于显示查询结果,直接看源码就可以了,这里不做解释。

 

运行结果:

 

结果不出意外,我们用一个通用的函数实现了对不同数据模型的增加和查询。

使用时我们的只需要创建自己的数据模型类继承TDObject,添加初始化宏,实现宏和初始化成员变量及成员变量映射。

 

后续优化:这四节简单实现了功能,后续扩展优化空间仍然很大,比如可以通过智能指针替换接收的链表,这样既能防止内存泄漏更加方便操作;TDLogic用单例模式来实现等。这些都需要根据具体功能和习惯自己去研究了。

到这里数据库模版章节已经完了,后续我们会在该基础上继续实现与HTTP服务器的soap交互,从C/S过渡到B/S。

 

文中测试使用数据库在源码首页,方便添加测试。

源码下载:http://download.csdn.net/detail/u011736517/9762820

3 0