本篇想說一下如何獲取記錄集中各種型別的數值。比如資料庫中定義的是varchar型別等,我們獲取資料時該怎麼寫呢?這裡我提供一些巨集定義,大家只要在stdafx.h或者其它需要使用這些巨集的地方插入這些語句,就可以很輕鬆的獲取資料庫中的資料了。與資料庫是何種型別沒有關係。
#define createinstance(sp,riid)
這是建立資料庫連線,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");
由於資料庫呼叫並沒有圖例,所以沒有可以貼出。
資料庫程式設計筆錄之四
本篇想說一下如何獲取記錄集中各種型別的數值。比如資料庫中定義的是varchar型別等,我們獲取資料時該怎麼寫呢?這裡我提供一些巨集定義,大家只要在stdafx.h或者其它需要使用這些巨集的地方插入這些語句,就可以很輕鬆的獲取資料庫中的資料了。與資料庫是何種型別沒有關係。define createin...
資料庫程式設計筆錄之二
搞定ado引入後,我嘗試用command方式呼叫儲存過程。儲存過程主要是根據輸入的引數,執行乙個複雜的查詢語句,因此返回的是個記錄集,同時儲存過程本身有個返回引數。程式如下 問題來了,不管是用raw execute還是execute返回記錄集,都不能正確的獲取返回引數 ret的值,始終是vt emp...
資料庫程式設計筆錄之二
搞定ado引入後,我嘗試用command方式呼叫儲存過程。儲存過程主要是根據輸入的引數,執行乙個複雜的查詢語句,因此返回的是個記錄集,同時儲存過程本身有個返回引數。程式如下 問題來了,不管是用raw execute還是execute返回記錄集,都不能正確的獲取返回引數 ret的值,始終是vt emp...