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.查询

/*
<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.计数

/*
<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.保存(有则更新无则插入)

/*
<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>
*/