在使用ado技術運算元據庫時,訪問變數的資料型別都是com型別,這就要求經常在com型別和普通資料型別之間進行型別轉換。
ado中特有的資料型別包括以下三種:
1)variant
該型別是結構化的資料型別,它包含值成員和資料型別成員。
variant可以包含許多其他的資料型別:如variant、bstr、boolean、idispatch或者iunknow指標、貨幣、日期等。
com中由_variant_t 類來封裝和管理variant資料型別。
在使用ado物件模型運算元據庫時,如果物件的某個方法或者屬性運算元接受某個值,那麼通常表明該值在_variant_t 中傳遞。
注:在利用ado物件進行c++資料型別的相關資料庫操作(如將cstring型別的值新增到資料庫)時,需要進行強制型別轉換
例如:對於 cstring m_strname;
m_precordset->putcollect ( "姓名" , _variant_t ( m_strname ) );
2)bstr
該型別 ( basic string )也是結構化的資料型別,它包含字串和字串的長度。
com提供分配、處理和釋放bstr的方法,由_bstr_t類來封裝和管理bstr資料型別
在使用ado物件模型運算元據庫時,如果物件的某個方法或者屬性運算元接受乙個字串值,那麼通常表明該值的形式為_bstr_t,而非一般的cstring。
3)safearray
同樣是一種結構化的資料型別,包含其它資料型別的陣列。
在使用ado物件模型運算元據庫時,如果物件的某個方法或者屬性運算元接受或者返回乙個陣列,則陣列型別只能是safearray,而非通常意義上的c/c++陣列。
通常,從資料庫中取出的字段值大都在_variant_t中傳遞,下面給出從com型別variant向cstring型別轉換的通用函式。
該函式將為資料庫的訪問和操作提供極大便利。
cstring clefttreeview::varianttocstring(const _variant_t &var)
break;
case vt_blob:
case vt_blob_object:
case 0x2011:
strvalue = "[blob]";
break;
case vt_bool: //布林型
strvalue = var.boolval ? "true" : "false";
break;
case vt_date: //日期型
break;
case vt_null://null值
case vt_empty: //空
strvalue = "";
break;
case vt_unknown: //未知型別
default:
strvalue = "un_know";
break;
}return strvalue;}
from:
ADO資料庫程式設計總結 一
ado 技術簡介 ado是為ms 的強大的資料訪問介面 ole db 設計的,上乙個便於使用的應用程式層。ole db 為任何資料來源都提供了高效能的訪問,包括 關係型資料庫 非關係型資料庫 電子郵件 檔案系統 文字和圖形以及自定義業務物件等。ado 2.0 實際上是基於 msado15.dll 這...
ADO資料庫程式設計
一下 全部測試通過 連線資料庫 如下 hresult hr coinitialize null cstring strsql variant t user name try catch com error e 查詢資料庫 cstring sql select from data variant t ...
MFC Access資料庫(ADO資料庫程式設計)
最近專案需要使用到資料庫,專案本身使用的是mfc。於是選擇了簡單的access資料,本文將介紹本人如何在mfc使用的access資料庫。順帶提一句,本文使用的系統為win8.1,64位,編譯環境為vs2010和office2010,如出現連線問題,可以看看access的位數與系統位數是否一致。本文是...