数据库编程笔录之四

博客介绍了如何获取记录集中各种类型的数值。提供了一些宏定义,可在stdafx.h或其他需要的地方插入,用于创建数据库连接、command和记录集对象,以及获取数据库中字符串、double型、整数、日期等类型的数据,并给出了调用例程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇想说一下如何获取记录集中各种类型的数值。比如数据库中定义的是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");
由于数据库调用并没有图例,所以没有图片可以贴出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐鹦鹉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值