vs2010版本的C++OBDC方式連接數(shù)據(jù)庫(kù)(ACCESS和SQL2008)_第1頁(yè)
vs2010版本的C++OBDC方式連接數(shù)據(jù)庫(kù)(ACCESS和SQL2008)_第2頁(yè)
vs2010版本的C++OBDC方式連接數(shù)據(jù)庫(kù)(ACCESS和SQL2008)_第3頁(yè)
vs2010版本的C++OBDC方式連接數(shù)據(jù)庫(kù)(ACCESS和SQL2008)_第4頁(yè)
vs2010版本的C++OBDC方式連接數(shù)據(jù)庫(kù)(ACCESS和SQL2008)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VS2010連接數(shù)據(jù)庫(kù)(access和sql 2008)現(xiàn)在很多人開(kāi)始用VS2010的C+了,以前大家都是從VC6.0開(kāi)始使用,對(duì)6.0比較熟悉,網(wǎng)上很多關(guān)于連接數(shù)據(jù)庫(kù)的方法都是針對(duì)VC6.0的,很多人用2010用了一段時(shí)間之后不隨手就放棄了,繼續(xù)使用VC6.0.作者作為一名VS2010版本開(kāi)始學(xué)習(xí)使用的人在數(shù)據(jù)庫(kù)連接的時(shí)候也遇到很多問(wèn)題,在這里和大家分享如下:首先是用ACCESS 方式連接數(shù)據(jù)庫(kù):以前VC6.0怎么連接相信大家都能夠百度得到了,他是通過(guò)首先打開(kāi)控制面板->管理工具->數(shù)據(jù)源(ODBC)就到了圖一界面:圖一然后點(diǎn)擊右邊的添加按鈕:很多書(shū)里面都叫添加時(shí)候選第二項(xiàng),也就

2、是圖二里面所以深色背景那項(xiàng):圖二Vc6.0的操作就是這樣選擇。但在VS2010里面就不對(duì)。我用的是VS2010然后用ACCESS2007做數(shù)據(jù)庫(kù)保留后綴名:accdb如圖三圖三選擇這一項(xiàng)在VS2010里面就不會(huì)出錯(cuò)了我在這里添加了一個(gè)叫:liyixu的access數(shù)據(jù)庫(kù)這就配置好了數(shù)據(jù)源接下來(lái),講VS2010里面怎樣連接這個(gè)數(shù)據(jù)庫(kù):在VC6.0里面是通過(guò)添加類的方法來(lái)添加數(shù)據(jù)庫(kù)里面的具體某一個(gè)表。而在VS2010里面也差不多。但是當(dāng)我們按照VC6.0添加正常類的時(shí)候發(fā)現(xiàn),他沒(méi)有基類CRecordset類可以選擇:圖四比如:如果選擇圖四中的MFC類圖五他里面沒(méi)有CRecordset基類可供選擇,

3、也就無(wú)從選擇數(shù)據(jù)源和表。那么VS2010里面其實(shí)是有專門(mén)的ODBC使用者設(shè)置的。選擇:圖六圖六中的MFC ODBC使用者選項(xiàng),不需要輸入名稱位置,點(diǎn)擊添加按鈕:圖七進(jìn)入MFC ODBC使用者向?qū)В狐c(diǎn)擊數(shù)據(jù)源按鈕,進(jìn)入選擇數(shù)據(jù)源對(duì)話框,把文件數(shù)據(jù)源視圖切換到系統(tǒng)數(shù)據(jù)源視圖:圖八選擇之前在數(shù)據(jù)源中定義的liyixu 用戶數(shù)據(jù)源點(diǎn)擊確定出現(xiàn)登陸界面:圖九這里我登錄名和密碼是在添加數(shù)據(jù)源時(shí)在高級(jí)選項(xiàng)中設(shè)置的,如果你沒(méi)有設(shè)置,當(dāng)然就沒(méi)有,直接單擊確定按鈕就可以連接了圖十出現(xiàn)圖示界面 我的數(shù)據(jù)庫(kù)里面只有一個(gè)表會(huì)員信息,所以直接選擇他,然后單擊確定回到向?qū)Ы缑?,單擊完成,完成連接在這里你可以自定義自己的類的

4、名稱:圖 十一我在這里就直接以(huiyuaninfo)會(huì)員信息為類名了。在圖十一中我勾選了綁定所有列 然后就會(huì)被卡住程序崩潰,然后不勾選就沒(méi)有這種情況,如果在前面圖九中你設(shè)置了登陸名和密碼,程序也會(huì)發(fā)出警告,所有密碼出現(xiàn)在代碼中,編譯也會(huì)不成功,這時(shí)候把#error那一行注釋掉就行了。這樣就能以O(shè)DBC方式連接上ACCESS數(shù)據(jù)庫(kù)很清楚吧下面講一講怎樣連接SQL 2008 (這個(gè)是重點(diǎn)):很多人連接SQL失敗是數(shù)據(jù)庫(kù)配置的問(wèn)題,權(quán)限沒(méi)有,所以訪問(wèn)被拒絕。這個(gè)要從SQL 2008的安裝說(shuō)起,由于是一時(shí)興起寫(xiě)這篇文章,所以我就不把自己的數(shù)據(jù)庫(kù)卸載了重裝了,其實(shí)就一個(gè)地方。在SQL 2008安裝過(guò)

5、程中,很多教材都叫選擇windows登陸模式,默認(rèn)實(shí)例。而不管是這里講的ODBC模式連接SQL 還是ADO方式這種比較方便的方式連接都需要登錄名和密碼。你在單擊上做練習(xí)的話 當(dāng)然是不需要什么登錄名的了,window驗(yàn)證,開(kāi)機(jī)就可以用自然很方便,但是其他軟件要訪問(wèn)它,必然要給他權(quán)限和接口,所以選擇混合模式,設(shè)置SQL登錄方式中用戶名sa的密碼。注意:密碼一定要復(fù)雜不然還通不過(guò)。這是其一。二、打開(kāi)SQL Server 2008 配置工具->SQL Server 配置管理器。首先確保sql server服務(wù)開(kāi)啟,然后圖 十二我安裝的學(xué)習(xí)版哈,見(jiàn)笑了,設(shè)置SQL Server網(wǎng)絡(luò)配置中SQL E

6、XPRESS和MSSQLSERVER中的TCP/IP和Named Pipes協(xié)議的狀態(tài)為啟用,默認(rèn)是不啟用的。設(shè)置完成后重啟服務(wù)就可以了。然后配置ODBC數(shù)據(jù)源:以一個(gè)簡(jiǎn)單實(shí)例來(lái)說(shuō)明:學(xué)籍管理系統(tǒng)。 打開(kāi)SQL Server management Studio以SQL server方式連接數(shù)據(jù)庫(kù):圖 十三新建數(shù)據(jù)庫(kù) member。在member數(shù)據(jù)庫(kù)里面創(chuàng)建兩個(gè)表:user和score。我之后會(huì)以O(shè)DBC方式連接score表設(shè)計(jì)score表:圖 十四有上圖所示的一些列。然后再自己先編寫(xiě)一些內(nèi)容:比如:圖 十五這是我隨意編寫(xiě)的一些信息然后開(kāi)始同前面設(shè)置ACCESS數(shù)據(jù)源一樣的操作:這里添加選SQ

7、L Server選項(xiàng):圖 十六圖 十七 服務(wù)器選自己的電腦,因?yàn)閱螜C(jī)練習(xí)嘛,最簡(jiǎn)單了,點(diǎn)擊完成。出現(xiàn)圖十八所示界面:圖 十八你可以單擊測(cè)試數(shù)據(jù)源,測(cè)試一下,如果照前面的設(shè)置進(jìn)行了的話,連接就會(huì)成功,出現(xiàn)如圖十九的對(duì)話框:圖 十九至此,ODBC的sql數(shù)據(jù)源設(shè)置好了:圖 二十然后打開(kāi)VS2010新建項(xiàng)目,創(chuàng)建MFC對(duì)話框程序。在VS2010中創(chuàng)建對(duì)話框向?qū)](méi)有連接數(shù)據(jù)源的選項(xiàng),單文檔和多文檔是有的。那么先不管,先來(lái)設(shè)計(jì)學(xué)籍管理系統(tǒng)的對(duì)話框界面如下:圖 二十一這個(gè)界面,相信學(xué)過(guò)MFC的同學(xué)都會(huì)做了,然后對(duì)相應(yīng)的變量進(jìn)行設(shè)計(jì)。然后創(chuàng)建數(shù)據(jù)庫(kù)連接,還是添加類里面選擇ODBC數(shù)據(jù)庫(kù)使用者圖 二十二出現(xiàn)數(shù)

8、據(jù)源選擇界面,單擊數(shù)據(jù)源按鈕,出現(xiàn)數(shù)據(jù)源菜單,切換到系統(tǒng)數(shù)據(jù)源視口,然后選擇之前設(shè)置的huiyuaninfo sql 數(shù)據(jù)庫(kù)。圖 二十三單擊確定,出現(xiàn)登陸界面:圖 二十四這時(shí)候就必須輸入sa用戶和密碼,sa用戶的創(chuàng)建在前面說(shuō)了,要在數(shù)據(jù)庫(kù)安裝的時(shí)候設(shè)置,單擊確定選擇score表:圖 二十五至此,數(shù)據(jù)庫(kù)連接成功然后創(chuàng)建了一個(gè)Cscore類,然后我們來(lái)看看他都有哪些內(nèi)容:#pragma once/ 代䨲碼?生¦¨²成¨¦在¨² 2013年¨º1月?22日¨?, 10

9、:26class Cscore : public CRecordsetpublic:Cscore(CDatabase* pDatabase = NULL);DECLARE_DYNAMIC(Cscore)CStringWm_stuid;CStringWm_stuname;CStringWm_stuclass;longm_usualscore;longm_testscore;longm_totalscore;public:virtual CString GetDefaultConnect();/ 默?認(rèn)¨?連¢?接¨®字Á?符¤?串

10、28;?virtual CString GetDefaultSQL(); / 記?錄?集¡¥的Ì?默?認(rèn)¨? SQLvirtual void DoFieldExchange(CFieldExchange* pFX);/ RFX 支¡ì持?/ 實(shí)º¦Ì現(xiàn)?#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif;VS2010的注釋粘貼到word里面會(huì)亂碼,我也不知道怎么

11、回事,不過(guò)這不影響程序的理解,可以看到,這個(gè)類定義了六個(gè)變量和兩個(gè)虛函數(shù)再看他的源程序:/ score.h : Cscore 類¤¨¤的Ì?實(shí)º¦Ì現(xiàn)?/ Cscore 實(shí)º¦Ì現(xiàn)?/ 代䨲碼?生¦¨²成¨¦在¨² 2013年¨º1月?22日¨?, 10:26#include "stdafx.h"#include "score.h&q

12、uot;IMPLEMENT_DYNAMIC(Cscore, CRecordset)Cscore:Cscore(CDatabase* pdb): CRecordset(pdb)m_stuid = L""m_stuname = L""m_stuclass = L""m_usualscore = 0;m_testscore = 0;m_totalscore = 0;m_nFields = 6;m_nDefaultType = dynaset;/#error 安ã2全¨?問(wèn)¨º題¬a:

13、4;o連¢?接¨®字Á?符¤?串ä?可¨¦能¨¹包㨹含?密¨¹碼?。¡ê/ 此ä?連¢?接¨®字Á?符¤?串ä?中D可¨¦能¨¹包㨹含?明¡Â文?密¨¹碼?和¨ª/或¨°其?他?重?要°a/

14、信?息¡é。¡ê請(qǐng)?在¨²查¨¦看¡ä完ª¨º此ä?連¢?接¨®字Á?符¤?串ä?并¡é找¨°到Ì?所¨´有®D與®?安ã2全¨?/ 有®D關(guān)?的Ì?問(wèn)¨º題¬a后¨®移°?除y #error。¡&#

15、234;可¨¦能¨¹需¨¨要°a將?此ä?密¨¹碼?存ä?/ 儲(chǔ)ä¡é為a其?他?格?式º?或¨°使º1用®?其?他?的Ì?用®?戶¡ì身¦¨ª份¤Y驗(yàn)¨¦證¡è。¡êCString Cscore:GetDefaultConnect()return _T("D

16、SN=xuejiguanli;Trusted_Connection=Yes;APP=Microsoftx00ae Visual Studiox00ae 2010;WSID=LIYI;DATABASE=member;Network=DBMSSOCN");CString Cscore:GetDefaultSQL()return _T("dbo.score");void Cscore:DoFieldExchange(CFieldExchange* pFX)pFX->SetFieldType(CFieldExchange:outputColumn);/ RFX_Te

17、xt() 和¨ª RFX_Int() 這a類¤¨¤宏¨º依°¨¤賴¤¦Ì的Ì?是º?/ 成¨¦員¡À變À?量¢?的Ì?類¤¨¤型¨ª,ê?而?不?是º?數(shù)ºy據(jù)Y庫(kù)a字Á?段?的Ì?類¤¨¤型¨ª。¡ê/ OD

18、BC 嘗¡é試º?自Á?動(dòng)¡¥將?列¢D值¦Ì轉(zhuǎn)Áa換?為a所¨´請(qǐng)?求¨®的Ì?類¤¨¤型¨ªRFX_Text(pFX, _T("stuid"), m_stuid);RFX_Text(pFX, _T("stuname"), m_stuname);RFX_Text(pFX, _T("stuclass"), m_stuclass);RFX_

19、Long(pFX, _T("usualscore"), m_usualscore);RFX_Long(pFX, _T("testscore"), m_testscore);RFX_Long(pFX, _T("totalscore"), m_totalscore);/ Cscore 診?斷?#ifdef _DEBUGvoid Cscore:AssertValid() constCRecordset:AssertValid();void Cscore:Dump(CDumpContext& dc) constCRecordset:D

20、ump(dc);#endif /_DEBUG他把表中的六列和六個(gè)變量建立了關(guān)系。然后我們就可以通過(guò)這六個(gè)變量來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。下面給出對(duì)話框初始化函數(shù)里面的代碼:BOOL CxuejiDlg:OnInitDialog()CDialogEx:OnInitDialog();/打䨰開(kāi)a數(shù)ºy據(jù)Y集¡¥,ê?建¡§立¢¡é數(shù)ºy據(jù)Y集¡¥和¨ª對(duì)?話¡ã框¨°變À?量¢

21、;?之?間?的Ì?聯(lián)¢a系¦ÌCscore m_set;m_set.Open();m_set.MoveFirst();m_stuid=m_set.m_stuid;m_stuname=m_set.m_stuname;m_testscore=m_set.m_testscore;m_usualscore=m_set.m_usualscore;m_totalscore=m_set.m_totalscore;UpdateData(false);/設(shè)¦¨¨置?列¢D表À¨ª框¨°

22、;的Ì?風(fēng)¤?格?DWORD dwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE;m_list.SetExtendedStyle(dwExStyle);m_list.SetTextColor(RGB(255,0,0);m_list.SetBkColor(RGB(240,247,233);/初?始º?化¡¥列¢D表À¨ª 插?入¨?6列¢D,ê

23、?設(shè)¦¨¨置?寬¨ª度¨¨m_list.InsertColumn(0,L"學(xué)¡ì號(hào)?",LVCFMT_CENTER,65,0);m_list.InsertColumn(1,L"姓?名?",LVCFMT_CENTER,65,0);m_list.InsertColumn(2,L"班㨤級(jí)?",LVCFMT_CENTER,65,0);m_list.InsertColumn(3,L"平?時(shí)º¡

24、À成¨¦績(jī)¡§",LVCFMT_CENTER,65,0);m_list.InsertColumn(4,L"期¨²末?成¨¦績(jī)¡§",LVCFMT_CENTER,65,0);m_list.InsertColumn(5,L"總Á¨¹評(píng)¨¤成¨¦績(jī)¡§",LVCFMT_CENTER,65,0);CString strsql;strsql.Format(L

25、"select * from score order by stuid");ListAll(strsql);首先建立了一個(gè)列表框,然后要通過(guò)最后一行的ListAll函數(shù)來(lái)把數(shù)據(jù)庫(kù)里面的所有信息顯示到列表控件里面來(lái),初始化函數(shù)主要寫(xiě)了列表控件的初始化信息。列表控件的使用可以查詢MSDN有詳細(xì)的說(shuō)明。最后來(lái)看看ListAll函數(shù)是怎樣實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的顯示的:void CxuejiDlg:ListAll(CString str)m_list.DeleteAllItems();Cscore m_score;/tryif(m_score.IsOpen()m_score.Close();

26、if(!m_score.Open(CRecordset:snapshot,str)MessageBox(L"打䨰開(kāi)a數(shù)ºy據(jù)Y庫(kù)a失º¡ì敗㨹!ê?",L"數(shù)ºy據(jù)Y庫(kù)a錯(cuò)䨪誤¨®",MB_OK);return;catch(CDBException *e)e->ReportError();/int nindex=0;m_score.MoveFirst();CString uscore,tscore,fscore;while(!m

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論