資料庫程式設計筆錄之四

2021-08-21 23:06:22 字數 1678 閱讀 5994

本篇想說一下如何獲取記錄集中各種型別的數值。比如資料庫中定義的是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...