我是一個剛剛進入VC++的一個小菜鳥 ,最近由於有一個課題需要 使用VC++和數據庫的連接的編程課題,所以我初次學習了這方面的內容。我折騰了2天的樣子,才寫出了一個很簡易的Test,這里我主要想分享下我在學習的過程中遇到的問題和一點點小小的體會吧,希望有懂的人看到了這篇博客願意幫我解答下這些問題,感之不盡。
由於入門的書是《VC++開發入門和編程實踐》,上面關於這個部分的內容有亮點,一個是ODBC和ADO。我就拿了ODBC做了第一次嘗試,我用的是ACCESS2010和VS2010,結果在建立MFC的時候選擇數據源的時候出現了問題,開始的時候是說需要必須連接數據源,可是剛剛我點了很多次我需要建立的數據源啊?然后我就從MFC建立的同時新建數據源,結果悲劇又發生了,還是連接不上,於是我轉戰ADO。
首先我看了孫鑫的視頻第二十課,講到了ADO連接數據源的相關編程。根據我圖書館中借的書《Vistual C++ 數據庫系統開發完全手冊》的內容了解到了很多,所以,我在這里根據孫鑫的視頻編程歸納了一下大致的編程順序:
我前期各種教程的一個最大的苦惱就是一些ADO函數不知道在哪里添加,在這里我就說明下把,如果是一個基於對話框模式的MFC的exe文件,就直接在那個你需要進行數據庫調用的那個按鈕對應的函數添加。
第一步,需要囊括ADO的文件:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 放在StdAfx.h中關於各種include的描述之后。這句話中#import的意思是引入,后面使用了rename為了避免類型庫文件中的EOF和系統文件的EOF重名。
第二步,各種初始化和定義:
CoInitialize(NULL); //初始化COM環境
_ConnectionPtr pCon( __uuidof(Connection));
_RecordsetPtr pRe(__uuidof(Recordset));
Connection對象是與數據源相連接,而Recordset對象記錄集。
第三步,連接:
pCon->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=admin;Data Source=Agenda";
try
{
pCon->Open("","","",adConnectUnspecified);
}
catch(_com_error *e)
{
::MessageBox(NULL,_T("無法打開"),_T("提示"), MB_OK | MB_ICONWARNING);
}
我就在這部卡了很久很久,因為我獲取不到pCon->ConnectionString。這是一個連接字符串,我看到的大部分方法都是從一個COM控件Ado Date Control獲取,可是VS2010已經不存在這個控件了,在去百度了下一些教程。結果下的OCX文件說不兼容,讓我很糾結,我到現在為止都不知道如何在VS2010上面獲取這個連接字符串,我希望有高手能夠指導我這個問題。
后來我實在沒有辦法就直接下了個VC6.0++來獲取這個連接字符串,很輕松的就獲取到了。但是畢竟這種方法灰常麻煩,所以我很蛋疼。
接下來每個步驟瞬間就很簡單了,至於這里為啥要用try和catch,是因為我怕連接的時候出現各種神奇的問題,於是我想捕捉下錯誤。
第四歩,用SQL語句操作:
try
{
pRe = pCon->Execute("SELECT * FROM Agenda",
NULL,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
Execute這個方法的意義我個人以為是將連接和使用結合的作用。第一個參數是SQL語句,第二個是個可選的參數 ,用來返回記錄數目 ,第三個這是如何為其賦值。
第五步,對數據庫操作:
while(!pRe->adoEOF)
{
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRe->GetCollect(_T("AgendaName")));
pRe->MoveNext();
}
第六步,釋放占有的內存:
pRe->Close();
pCon->Close();
pRe.Release();
pCon.Release();
CoUninitialize();
注意,最后兩個Release之前必須是用.而不是->,然后VS2010中不知道為啥會將.強制改為->,這不我也是從VC6.0++上更改的。
OK,這兩天的爆頭苦惱的數據庫連接就搞定了,接下來課題依舊還要繼續寫,希望這篇文章會給有幫助的初學者些許幫助吧,還請如果的高手指導我如何在VS2010中獲取對應的連接字符串。謝謝!!