ADO助手加下手写30行代码完成大部分数据库代码

ADO助手加上手写30行代码完成大部分数据库代码
新版ADO助手1.20发布了,相应的数据库类也发布了,配合上两个宏即完成下面的数据库代码。
ADO助手使用详见《如何使用ADO助手生成数据库代码》
数据库类使用详见《MFC之ADO数据库快速编程》

用ADO助手根据SQL生成数据库记录类CDBDemo,在业务数据库类中CDBBusiness添加如下声明和实现

ADO_DECLARE(_, _, CDBDemo);

ADO_IMPLEMENT(_, _, CDBBusiness, CDBDemo, "tbl_Demo", "Guid", "Id, Guid, Name, Age, Photo");

上面两个宏编译后实现了如下数据库函数:

A.查询
C/C++ code

    /*
    <summary>
    通过主键定位获取单个记录
    </summary>
    <param name="rData">记录的类对象</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _Select_(CDBDemo& rData, DWORD dwFlag = 0) const;
    
    /*
    <summary>
    获取多个记录
    注:请调用Count(*)计算个数或者直接定量,调用std::vector<T>::reserve预留内存空间,否则可能有性能影响
    </summary>
    <param name="rData">记录的类向量对象</param>
    <param name="lpszCondition">SQL语句的WHERE子句,ORDER子句或者LIMIT子句任意组合,为空则查询整个表</param>
    <param name="lpszTop">SQL语句的TOP子句</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _Select_(std::vector<CDBDemo>& rData, LPCTSTR lpszCondition= _T(""), 
        LPCTSTR lpszTop = _T(""), DWORD dwFlag = 0) const;
        
    /*
    <summary>
    获取表数据,数据按主键升序排列
    注:请调用Count(*)计算个数或者直接定量,调用std::vector<T>::reserve预留内存空间,否则可能有性能影响
    </summary>
    <param name="rData">记录的类向量对象</param>
    <param name="lpszWhere">SQL语句的WHERE子句</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _SelectOrder_(std::vector<CDBDemo>& rData, LPCTSTR lpszWhere= _T(""), DWORD dwFlag = 0) const;


B.计数
C/C++ code

    /*
    <summary>
    计算当前主键在表中个数,为0或者1
    </summary>
    <param name="rData">记录的类对象</param>
    <param name="lCount">返回计算的个数,为0或者1</param>
    <returns>是否执行成功</returns>
    */
    bool _Count_(const CDBDemo& rData, long &lCount) const;
    
        
    /*
    <summary>
    计算类向量对象在数据库中的个数
    </summary>
    <param name="rData">记录的类向量对象</param>
    <param name="lCount">计算类向量对象在数据库中的个数</param>
    <returns>是否执行成功</returns>
    */
    bool _Count_(const std::vector<CDBDemo>& rData, long &lCount) const;

    
    /*
    <summary>
    计算表中数据个数
    </summary>
    <param name="lCount">返回计算的个数</param>
    <param name="lpszWhere">SQL语句的WHERE子句</param>
    <returns>是否执行成功</returns>
    */
    bool _CountCDBDemo_(long &lCount, LPCTSTR lpszWhere= _T("")) const;    


C.保存(有则更新无则插入)
C/C++ code

    /*
    <summary>
    通过主键定位记录,没有则插入,有则更新
    </summary>
    <param name="rData">记录的类对象</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _Save_(const CDBDemo& rData, DWORD dwFlag = 0) const;
    
    /*
    <summary>
    用Update进行插入或者更新多个记录
    </summary>
    <param name="rData">记录的类向量对象</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _Save_(const std::vector<CDBDemo>& rData, DWORD dwFlag = 0) const;
    
    /*
    <summary>
    用UpdateBatch进行批量插入或者更新多个记录
    </summary>
    <param name="rData">记录的类向量对象</param>
    <param name="dwFlag">用来控制类对象参与操作的字段</param>
    <returns>是否执行成功</returns>
    */
    bool _SaveBatch_(const std::vector<CDBDemo>& rData, DWORD dwFlag = 0) const;