1。首先,我們必須建立一個VC的工程。建立VC工程很簡單,只要如下操作即可。
1. 運行VC,菜單->File->New->Projects,然後選擇MFC AppWizard(exe),然後填好工程名稱,點擊OK。
2. 選擇應用程序類型爲Dialog based。
3. 點擊Finish,完成。
2。導入ADO。在VC環境下,一般來說,我們都是用的ADO來連接數據庫的。
在StdAfx.h(這是一個VC的全局頭文件,默認每個CPP文件都要引用它),添加如下代碼:
#import "c:program filescommon filessystemadomsado15.dll" no_namespace
rename ("EOF", "adoEOF")
rename ("BOF", "adoBOF")
請確認在你的系統中存在msado15.dll這個DLL,它的位置應該與上面的路徑一直,它是ADO的庫文件。
如果編譯不過,而且提示是一些如error C2011: 'LockTypeEnum' : 'enum' type redefinition的重定義,那麼請刪除以下的代碼:
#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h> // MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT
3。初始化ADO。
::CoInitialize(NULL); // 初始化COM,ADO是一個COM組件。
_ConnectionPtr opConn; // 連接
opConn.CreateInstance(__uuidof(Connection)); // 初始化一個連接
CString strConnect; // 格式化連接
strConnect.Format("Provider=MSDASQL.1;Driver={%s};Server=%s;DataBase=%s;UID=%s;PWD=%s;",
strDriver,
strServerPath,
strDb,
strUid,
strPwd);
opConn->Open(_bstr_t(lpczConn), "", "", adConnectUnspecified); // 打開連接
// 幹活,現在可以使用ADO中的其他對象了,比如_RecordsetPtr等
_RecordsetPtr opSet;
CString strSQL;
// tb_idealsoft
// +---------------+---------------+
// | Numb(int) | Name(varchar) |
// +---------------+---------------+
strSQL.Format("SELECT * FROM tb_idealsoft");
_variant_t vtConn = _variant_t(opConn, true);
opSet->PutCursorLocation(adUseClient); // 設定遊標
opSet->Open(_variant_t((LPCTSTR)strSQL), vtConn, adOpenStatic, adLockOptimistic, adCmdText); // 執行SQL語句,打開記錄集
long lCount = opSet->GetRecordCount(); // 表中記錄的數目
opSet->MoveFirst(); // 到記錄集的第一行
for(int i = 0; i < lCount; i++)
{
_variant_t vt = _m_opSet->GetCollect(_variant_t(_T("Name")));
// 由於Name這個域是字符串,所以需要將vt轉化成字符串
// 在此,我們有必要解釋一下_variant_t這個怪物,它的確是個怪物。微軟,就是一個恐龍園,
// 經常會放出一些莫名其妙的數據結構。
// 其實_variant_t與其說是一個class,還不如說它是一個union,其實在它的基類tagVARIANT中,的確
// 存儲了一個union,用來存放數據,而_variant_t其實就是對這個union的進一步封裝。
// 之前,微軟似乎試圖用它來統一所有變量的存儲與訪問,但始終不很成功,主要是這個東西實在是
// 太抽象了,但是ADO的成功推廣卻意外的使這個畜生逐漸成名。當然,主要還是令人厭惡。
// 在_variant_t中有一個變量叫做vt,它是用來記錄變量類型的,根據變量的類型,我們可以把_variant_t
// 轉化成不同的數據類型。
// _variant_t v;
// 比如當前vt = VT_I1(說明此時_variant_t代表了一個char型數據,具體的定義可以參看oaidl.h),我們可以
// 這樣來轉換:char ch = v.cVal;
// 如果當前的vt = VT_LPSTR,表明當前的_variant_t代表了一個char*型數據。
// 從而我們可以這樣轉換:char* psz = v.pcVal;
// ……
// 好了,現在可以將這個vt轉換爲char*然後將它保存起來了
// ……
opSet->MoveNext();
}
// 完事了,打掃戰場
opSet->Close();
// 現在插入一條數據,我們使用_ConnectionPtr的Execute接口
// int nNumb = 12;
// CString strName("南京");
strSQL.Format("INSERT INTO tb_idealsoft(Numb, Name) VALUES(%d, '%s')", nNumb, strName); // 注意字符串型變量要用單引號括起來
// _variant_t vtEffe
opConn->Execute(_bstr_t(strSQL), &vtEffe, adCmdText);
long nEffe = vtEffe.lVal; // 被影響的行數
// ……
// 關閉,釋放資源
opConn->Close();
::CoUninitialize();
-------- Access數據庫的連接字符串格式 --------------------------------------
CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin; Data Source=") + strDbPath + _T(";");
if( BARE != strPsw )
{
strConnect += _T("Jet OLEDB:Database Password=") + strPsw;
}
轉自:
http://hi.baidu.com/idealsoft/blog/item/d8152d03ba5773703812bb0d.html