使用C++(MFC)操做數據庫,首選就是ADO。ADO庫包含三個基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。在MFC要使用ADO(COM)首先要引用COM地址,編譯器纔可以實現。從網上的不少資料都介紹,將EOF重命名,防止和其餘衝突,那偶們也這樣作反正也不會有壞處。格式以下:
#include <comdef.h>
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "EndOfFields")
只要用過MFC的人都知道把它放在哪(stdafx.h)。因爲ADO是一個COM因此在調用他們以前要初始化COM環境,本人就在初始化這個栽了個跟頭。初始化OLE(調用AfxOleInit();)在方法uApp::InitInstance()中進行(必須在DoModal()以前),固然也能夠在你調用前初始化。OK下面就能夠調用了,系統會生成兩個文件,這些都是從COM高過來的。
_ConnectionPtr接口返回一個記錄集或一個空指針。一般使用它來建立一個數據鏈接或執行一條不返回任何結果的SQL語句,如一個存儲過程。使用 _ConnectionPtr接口返回一個記錄集不是一個好的使用方法。對於要返回記錄的操做一般用_RecordserPtr來實現。而用 _ConnectionPtr操做時要想獲得記錄條數得遍歷全部記錄,而用_RecordserPtr時不須要。
_CommandPtr接口返回一個記錄集。它提供了一種簡單的方法來執行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,你能夠利用全局 _ConnectionPtr接口,也能夠在_CommandPtr接口裏直接使用鏈接串。若是你只執行一次或幾回數據訪問操做,後者是比較好的選擇。但若是你要頻繁訪問數據庫,並要返回不少記錄集,那麼,你應該使用全局_ConnectionPtr接口建立一個數據鏈接,而後使用_CommandPtr 接口執行存儲過程和SQL語句。
_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定,遊標控制等。同_CommandPtr接口同樣,它不必定要使用一個已經建立的數據鏈接,能夠用一個鏈接串代替鏈接指針賦給 _RecordsetPtr的connection成員變量,讓它本身建立數據鏈接。若是你要使用多個記錄集,最好的方法是同Command對象同樣使用已經建立了數據鏈接的全局_ConnectionPtr接口,而後使用_RecordsetPtr執行存儲過程和SQL語句。
使用_ConnectionPtr和_RecordsetPtr來讀取數據庫內容:
1
try
{
2
//
TODO: 在此添加額外的初始化代碼
3
CString szServerName
=
_T(
"
Driver=SQL Server;Server=(local);Database=Domains;uid=sa;pwd=;
"
);
4
HRESULT hr
=
m_pConnection.CreateInstance(__uuidof(Connection));
5
hr
=
m_pConnection
->
Open((_bstr_t)szServerName,
""
,
""
,
0
);
6
hr
=
m_pRecordset.CreateInstance(__uuidof(Recordset));
7
CString szSQL
=
_T(
"
SELECT DomainName FROM Domains;
"
);
8
BSTR bstrSQL
=
szSQL.AllocSysString();
9
hr
=
m_pRecordset
->
Open(bstrSQL,(IDispatch
*
)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
10
while
(
!
m_pRecordset
->
EndOfFields)
11
{
12
_variant_t theValue;
13
theValue
=
m_pRecordset
->
GetCollect(
"
DomainName
"
);
14
15
if
(theValue.vt
!=
VT_NULL)
16
{
17
AfxMessageBox(CString(theValue));
18
}
19
m_pRecordset
->
MoveNext();
20
}
21
m_pRecordset
->
Close();
22
m_pConnection
->
Close();
23
}
24
catch
(_com_error
*
e)
25
{
26
MessageBox(e
->
Description(),e
->
Source());
27
}
OK,運行就能夠獲得數據了,這就做爲ADO(C++)編程入門的介紹,在實踐中慢慢體會,在失敗中前進。偶是個C++初學者,若是有不對的地方還請賜教。