数据库编程笔录之四
来源:互联网 发布:python灰帽子 epub 编辑:程序博客网 时间:2024/05/22 01:47
本篇想说一下如何获取记录集中各种类型的数值。比如数据库中定义的是varchar类型等,我们获取数据时该怎么写呢?这里我提供一些宏定义,大家只要在stdafx.h或者其它需要使用这些宏的地方插入这些语句,就可以很轻松的获取数据库中的数据了。与数据库是何种类型没有关系。
#define CREATEINSTANCE(sp,riid) {HRESULT _hr=sp.CreateInstance(__uuidof(riid));if(FAILED(_hr)) _com_issue_error(_hr);}
这是创建数据库连接,command和记录集对象使用的。可以这样调用:
CREATEINSTANCE(m_piConnection,Connection);
#define RsITEM(rs,x) rs->Fields->Item[_variant_t(x)]->Value
#define RsITEM_BSTR(rs,x) (RsITEM(rs,x).vt == VT_NULL)?CString(""):RsITEM(rs,x).bstrVal
#define RsITEM_DOUBLE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).dblVal
#define RsITEM_LONG(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).lVal
#define RsITEM_BYTE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).bVal
#define RsITEM_DATE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).date
#define RsITEM_BOOL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).boolVal
#define RsITEM_DECIMAL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0.0:RsITEM(rs,x)
以上宏就是获取数据库中字符串,double型,整数,日期,布尔和numeric等类型的数据。
调用例程如下:
sShipInfo.sMMSIID = RsITEM_BSTR(piRecordset,"MMSI_ID");
sShipInfo.sCallSign = RsITEM_BSTR(piRecordset,"CALL_SIGN");
sShipInfo.sShipName = RsITEM_BSTR(piRecordset,"NAME");
sShipInfo.fCOG = RsITEM_DECIMAL(piRecordset,"COG");
sShipInfo.fSOG = RsITEM_DECIMAL(piRecordset,"SOG");
sShipInfo.wBreadth = RsITEM_LONG(piRecordset,"WIDTH");
sShipInfo.wLength = RsITEM_LONG(piRecordset,"LENGTH");
sShipInfo.latLong.dLatitude = RsITEM_DECIMAL(piRecordset,"LAT");
sShipInfo.latLong.dLongitude = RsITEM_DECIMAL(piRecordset,"LONG");
sShipInfo.reptTime = RsITEM_DATE(piRecordset,"REPT_TIME");
由于数据库调用并没有图例,所以没有图片可以贴出。
#define CREATEINSTANCE(sp,riid) {HRESULT _hr=sp.CreateInstance(__uuidof(riid));if(FAILED(_hr)) _com_issue_error(_hr);}
这是创建数据库连接,command和记录集对象使用的。可以这样调用:
CREATEINSTANCE(m_piConnection,Connection);
#define RsITEM(rs,x) rs->Fields->Item[_variant_t(x)]->Value
#define RsITEM_BSTR(rs,x) (RsITEM(rs,x).vt == VT_NULL)?CString(""):RsITEM(rs,x).bstrVal
#define RsITEM_DOUBLE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).dblVal
#define RsITEM_LONG(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).lVal
#define RsITEM_BYTE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).bVal
#define RsITEM_DATE(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).date
#define RsITEM_BOOL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0:RsITEM(rs,x).boolVal
#define RsITEM_DECIMAL(rs,x) (RsITEM(rs,x).vt == VT_NULL)?0.0:RsITEM(rs,x)
以上宏就是获取数据库中字符串,double型,整数,日期,布尔和numeric等类型的数据。
调用例程如下:
sShipInfo.sMMSIID = RsITEM_BSTR(piRecordset,"MMSI_ID");
sShipInfo.sCallSign = RsITEM_BSTR(piRecordset,"CALL_SIGN");
sShipInfo.sShipName = RsITEM_BSTR(piRecordset,"NAME");
sShipInfo.fCOG = RsITEM_DECIMAL(piRecordset,"COG");
sShipInfo.fSOG = RsITEM_DECIMAL(piRecordset,"SOG");
sShipInfo.wBreadth = RsITEM_LONG(piRecordset,"WIDTH");
sShipInfo.wLength = RsITEM_LONG(piRecordset,"LENGTH");
sShipInfo.latLong.dLatitude = RsITEM_DECIMAL(piRecordset,"LAT");
sShipInfo.latLong.dLongitude = RsITEM_DECIMAL(piRecordset,"LONG");
sShipInfo.reptTime = RsITEM_DATE(piRecordset,"REPT_TIME");
由于数据库调用并没有图例,所以没有图片可以贴出。
- 数据库编程笔录之四
- 数据库编程笔录之四
- 数据库编程笔录之二
- 数据库编程笔录之三
- 数据库编程笔录之二
- 数据库编程笔录之三
- 数据库编程笔录之二
- 数据库编程笔录之一
- 数据库编程笔录之一
- 数据库编程笔录之一
- 数据库编程笔录之一
- java2核心技术之数据库编程笔录(一)
- Object-C学习笔录(四)多线程编程
- 数据库学习笔录
- ADO编程笔录
- OPenGL笔录之顶点笔录glVertex*
- Lua编程笔录--Lua初识及语法四(数组,迭代器,table表)
- 多线程编程之四
- Optimization of ETL Execution by pipelining method(ETL执行的流水线优化)
- 模块分解原理的探索
- web服务与w3c工作组
- 测试驱动需求分析--需求文档评审实例
- 数据备份与数据容灾
- 数据库编程笔录之四
- 多核编程中的负载平衡难题
- 数据库编程笔录之三
- Tomcat5.0.x使用经验两则
- 90%程序员写不出无BUG的二分查找程序?
- 数据库编程笔录之二
- 质疑>教程
- ADO.NET深入研究(2)[特别推荐]
- 数据库编程笔录之一