一、dll文件的導入
參考文獻:https://blog.csdn.net/qq_31209383/article/details/51199762
要使用數據庫,首先在stdafx.h中導入msado15.dll
#import #import "C:/Program Files/Common Files/System/ADO/msado15.dll" no_namespace rename("EOF","adoEOF")
但這樣會報錯,解決辦法如上面鏈接:
方法一:使用命名空間;
方法二:不使用命名空間,但將所有報錯的重定義名稱rename一下;
方法三:project -> setting -> C/C++ ->perprocessor ->perprocessor definitions : 里面添加 宏 _AFX_NO_DAO_SUPPORT
二、_ConnectionPtr、_RecordPtr是什么
這是微軟封裝好的智能指針,供調用數據庫使用。這兩個指針,即是類又是指針。
作為類,使用.操作符,這時候調用的是該類自己的方法,如pCon.CreateInstance("ADODB.Connection")就是創建實現一個com組件內的Connection對象,並將該對象的指針賦值給pCon,此時pCon就是一個接口指針了,此時就用->操作符。
三、Connection、_Connection與_ConnectionPtr之間的區別
_Connection是Connection的接口,是個struct結構,后者實現了前者。
_ConnectionPtr是對_Connection封裝后的智能指針,_com_ptr_t,智能指針實質上也是個類,是對指針進行了封裝;
Connection是COM組件類,即有CoClass屬性;
前兩者是指針,后者是類。
四、COM與MFC之間數據轉化問題
MFC內的數據結構(字符串,數字等)必須轉化成滿足COM結構的數據類型才能被COM的函數使用。
_bst_r,VARIANT,CComBSTR,CComVariant都是把MFC轉化成COM數據類型的類或類型。
五、Close()與Release()的區別
Close()只是關閉通道,並不釋放內存資源
Release(),釋放對接口指針的引用。打開一個通道前必須檢查上一個通道關閉並釋放資源(查看pCon==NULL),如果沒有,必須釋放,否則無法使用。
因此Close()不是必須的,Release()是。