




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)VC+環(huán)境下連接SQL Server數(shù)據(jù)庫方法指導(dǎo)實(shí)驗(yàn)類型:設(shè)計型一、實(shí)驗(yàn)環(huán)境1Windows XP操作系統(tǒng);2VC+6.0開發(fā)環(huán)境;3SQL server 2000數(shù)據(jù)庫管理系統(tǒng)。二、實(shí)驗(yàn)內(nèi)容和要求利用VC開發(fā)應(yīng)用程序,要求能夠通過界面完成對數(shù)據(jù)庫中數(shù)據(jù)的查詢、插入、刪除以及修改。三、實(shí)驗(yàn)原理VC訪問SQL Server數(shù)據(jù)庫,常用的方法有兩種:通過ODBC連接和通過ADO連接。下面分別介紹一下。采用ODBC方式要求先創(chuàng)建ODBC數(shù)據(jù)源,應(yīng)用程序通過數(shù)據(jù)源與數(shù)據(jù)庫連接
2、;并且在創(chuàng)建應(yīng)用程序時,只能是基于單文檔或多文檔,而無法直接創(chuàng)建基于對話框的應(yīng)用程序。采用ADO方式無需創(chuàng)建數(shù)據(jù)源,應(yīng)用程序可通過ADO直接與數(shù)據(jù)庫連接;ADO方式可以創(chuàng)建基于對話框的應(yīng)用程序。兩種方式都要在應(yīng)用程序中添加代碼以完成相應(yīng)的初始化功能。四、實(shí)驗(yàn)步驟下面通過兩個例子分別介紹基于ODBC方式和基于ADO方式的實(shí)驗(yàn)步驟。1 基于ODBC方式的實(shí)驗(yàn)步驟(1)在SQL Server2000中創(chuàng)建數(shù)據(jù)庫student,該數(shù)據(jù)庫中有學(xué)生表s用來存放學(xué)生信息。s表的結(jié)構(gòu)如下:屬性名類型是否為主鍵允許空備注snochar(8)是學(xué)號snamevarchar(10)否姓名ageint否年齡deptc
3、har(4)否所在系號commentvarchar(8)否評語 s表的創(chuàng)建方法在此不詳述。(2)創(chuàng)建ODBC數(shù)據(jù)源“開始”-“設(shè)置”-“控制面板”“管理工具”“數(shù)據(jù)源(ODBC)”,打開之后出現(xiàn)如圖1所示窗口。圖1點(diǎn)擊“添加”按鈕,出現(xiàn)圖2。圖2選擇SQL Server,點(diǎn)擊“完成”,出現(xiàn)圖3。圖3名稱中填寫所創(chuàng)建的數(shù)據(jù)源的名稱,本例中為student,描述可以不填。因?yàn)镾QL Server的服務(wù)器和客戶端均安裝在本地計算機(jī)上,所以服務(wù)器為(local)。如果本地計算機(jī)上只安裝了客戶端,服務(wù)器安裝在另外的機(jī)器上,服務(wù)器為另一臺機(jī)器的名稱。點(diǎn)擊“下一步”,出現(xiàn)圖4。圖4SQL Server如何驗(yàn)
4、證ID的真?zhèn)?,使用哪種方法要看安裝SQL Server2000時選擇的是哪種驗(yàn)證方式。如果是Windows驗(yàn)證,選擇使用網(wǎng)絡(luò)登錄ID的Windows NT驗(yàn)證;如果是混合驗(yàn)證模式則要選擇下面一種。本例中采用Windows驗(yàn)證。進(jìn)入數(shù)據(jù)庫無需另外的用戶名和密碼。點(diǎn)擊“下一步”,出現(xiàn)圖5。圖5這里要更改默認(rèn)的數(shù)據(jù)庫,默認(rèn)情況下數(shù)據(jù)源所連接的數(shù)據(jù)庫為master,這里要改為student數(shù)據(jù)庫。點(diǎn)擊“下一步”,出現(xiàn)圖6。圖6這里無需修改,點(diǎn)擊“完成”出現(xiàn)圖7。圖7點(diǎn)擊“測試數(shù)據(jù)源”,如果測試成功說明數(shù)據(jù)源已成功創(chuàng)建。(3)創(chuàng)建VC應(yīng)用程序。打開VC+6.0,新建工程,如圖8所示。選擇MFC AppW
5、izard(exe),工程名為exec1,存放在D盤實(shí)驗(yàn)文件夾里。圖8點(diǎn)擊“確定”,在出現(xiàn)的窗口中選擇“單文檔”,點(diǎn)擊“下一步”,出現(xiàn)圖9。圖9這里選擇“查看數(shù)據(jù)庫不使用文件支持”,還要選擇數(shù)據(jù)源,點(diǎn)擊“數(shù)據(jù)源”,彈出如圖10所示窗口。圖10選擇“student”數(shù)據(jù)源,點(diǎn)擊“OK”,在彈出的窗口中選擇表dbo.s,點(diǎn)擊“OK”返回圖9所示的界面。以后的創(chuàng)建步驟中沒有需要修改的地方可以直接點(diǎn)擊完成。這樣工程exec1就創(chuàng)建完成了,并且通過數(shù)據(jù)源與數(shù)據(jù)庫發(fā)生了關(guān)聯(lián)。創(chuàng)建好的工程可以運(yùn)行,結(jié)果如圖11所示。圖11(4)界面設(shè)計在工作區(qū)左邊的樹型結(jié)構(gòu)中,選擇ResourceView,展開Dialog
6、節(jié)點(diǎn),雙擊IDD_EXEC1_FORM,打開該對話框。在這里添加所需控件。如圖12所示。圖12此時運(yùn)行程序,結(jié)果如圖13所示。下一記錄圖13從界面可以看出程序要完成的功能。完整的程序運(yùn)行后,界面默認(rèn)顯示表中的第一條數(shù)據(jù),點(diǎn)擊工具欄中的“下一記錄”可以顯示下一條記錄;點(diǎn)擊“刪除”按鈕可將當(dāng)前顯示的數(shù)據(jù)從庫中刪除;點(diǎn)擊“清除”按鈕,將所有編輯框清空;在界面輸入學(xué)生信息,點(diǎn)擊“添加”按鈕可將此學(xué)生信息輸入至數(shù)據(jù)庫;點(diǎn)擊“修改”按鈕可修改當(dāng)前顯示的學(xué)生信息。為界面上的編輯框和按鈕添加變量和函數(shù)。在界面右鍵單擊,選擇“建立類向?qū)А保瑥棾鋈鐖D14所示窗口。圖14本例中需要為編輯框IDC_AGE, IDC_
7、COMMENT, IDC_DEPARTMENT, IDC_NAME, IDC_SNO添加變量。以IDC_AGE為例,點(diǎn)擊“ADD Variable”彈出如圖15所示窗口。圖15在下拉框中選擇m_pSet-m_age為變量名,這里的變量是與數(shù)據(jù)庫表s中的字段相對應(yīng)的,變量類型也與s中的字段類型對應(yīng)。其它變量的添加方法相同。為按鈕添加函數(shù)比較簡單,雙擊按鈕即可。添加的函數(shù)在exec1View.cpp文件中。(5)代碼設(shè)計“清除”按鈕所添加的函數(shù)為OnClear(),具體代碼如下:/名稱:OnClear/功能:清除編輯框中的內(nèi)容void CExec1View:OnClear() CWnd* c1;
8、c1= CWnd:GetDlgItem(IDC_SNO);/獲得編輯框 c1-SetWindowText(); /將編輯框置空c1= CWnd:GetDlgItem(IDC_NAME); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_DEPARTMENT); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_AGE); c1-SetWindowText(); c1= CWnd:GetDlgItem(IDC_COMMENT); c1-SetWindowText(); “添加”按鈕所添加的函數(shù)為OnAdd(),具體代碼
9、如下:/名稱:OnAdd/功能:插入一條記錄void CExec1View:OnAdd() / TODO: Add your control notification handler code here/判斷年齡是否合適CString strAge;GetDlgItem(IDC_AGE)-GetWindowText(strAge);int nAge = atoi(strAge.GetBuffer(0);if(nAge120)AfxMessageBox(輸入的年齡不符合實(shí)際!);return;/呈增加狀態(tài)m_pSet-AddNew(); UpdateData();/更新數(shù)據(jù)庫 m_pSet-Up
10、date();/重新獲得數(shù)據(jù) m_pSet-Requery(); UpdateData(FALSE);“刪除”按鈕所添加的函數(shù)為OnDelete(),具體代碼如下:/名稱:OnDelete/功能:刪除當(dāng)前記錄void CExec1View:OnDelete() / TODO: Add your control notification handler code here/發(fā)出刪除命令 m_pSet-Delete();/重新獲得記錄集 m_pSet-Requery(); UpdateData(FALSE);“修改”按鈕所添加的函數(shù)為OnEdit(),具體代碼如下:/名稱:OnEdit/功能:修改
11、當(dāng)前記錄void CExec1View:OnEdit() / TODO: Add your control notification handler code here/判斷年齡是否合適CString strAge;GetDlgItem(IDC_AGE)-GetWindowText(strAge);int nAge = atoi(strAge.GetBuffer(0);if(nAge120)AfxMessageBox(輸入的年齡不符合實(shí)際!);return;/呈編輯狀態(tài)m_pSet-Edit();UpdateData();/更新數(shù)據(jù)庫m_pSet-Update();/重新獲得記錄集m_pSet
12、-Requery();UpdateData(FALSE);(6)運(yùn)行結(jié)果圖162基于ADO方式的實(shí)驗(yàn)步驟此例中所用數(shù)據(jù)庫與上例中相同;此例中無需創(chuàng)建數(shù)據(jù)源。(1)創(chuàng)建VC應(yīng)用程序打開VC+6.0,新建工程。選擇MFC AppWizard(exe),工程名為exec2,存放在D盤實(shí)驗(yàn)文件夾里。點(diǎn)擊“確定”,在彈出的窗口中選擇“基本對話框”,以后的步驟沒有需要修改的地方,可以直接點(diǎn)擊“完成?!边@樣一個基于基本對話框的工程就創(chuàng)建好了。(2)界面設(shè)計在工作區(qū)左邊的樹型結(jié)構(gòu)中,選擇ResourceView,展開Dialog節(jié)點(diǎn),雙擊IDD_EXEC2_DIALOG,打開該對話框。在這里添加所需控件。如圖
13、17所示。圖17為編輯框和列表框添加變量。在界面右鍵單擊,選擇“建立類向?qū)А保瑥棾鋈鐖D18所示窗口。圖18本例中需要為編輯框IDC_AGE, IDC_COMMENT, IDC_DEPT, IDC_NAME, IDC_SNO,列表框IDC_LIST添加變量。以IDC_AGE為例,點(diǎn)擊“ADD Variable”彈出如圖19所示窗口。圖19這里變量名為m_age,類型可從下拉框里選。添加變量完成之后類向?qū)鐖D20所示。圖20為按鈕添加函數(shù),雙擊按鈕可為其添加函數(shù),在exec2Dig.cpp文件里。(3)與ADO相關(guān)的代碼設(shè)計引入ADO庫文件,使用ADO前必須在工程的StdAfx.h頭文件里用直接引
14、入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:/加入ADO支持庫#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF) 定義ADO連接變量指針,在exec2.h文件的class CExec2App : public CwinApp方法中添加代碼如下: / 定義ADO連接變量指針_ConnectionPtrm_pConnection;該指針為整個應(yīng)用程序共享,所以放在public下面。定義ADO連接、命令、記錄集變量指針,在exec2Dlg.h文
15、件的class CExec2Dlg : public CDialog方法中添加如下代碼: / 定義ADO連接、命令、記錄集變量指針_ConnectionPtrm_pConnection;_CommandPtrm_pCommand;_RecordsetPtrm_pRecordset;該指針為整個應(yīng)用程序共享,所以放在public下面。初始化OLE/COM庫環(huán)境。必須注意的是,ADO庫是一組COM動態(tài)庫,這意味應(yīng)用程序在調(diào)用ADO前,必須初始化OLE/COM庫環(huán)境。在MFC應(yīng)用程序里,一個比較好的方法是在應(yīng)用程序主類的InitInstance成員函數(shù)里初始化OLE/COM庫環(huán)境。在本例中,在exe
16、c2.cpp文件的BOOL CExec2App:InitInstance()成員函數(shù)里添加如下代碼:/初始化COM,創(chuàng)建ADO連接等操作AfxOleInit();m_pConnection.CreateInstance(_uuidof(Connection);/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因?yàn)樗袝r會經(jīng)常出現(xiàn)一些想不到的錯誤try /打開本地 Sql Server庫student m_pConnection-Open(driver=SQL Server; Server=lenovo-pc;Database=student;UID=;PWD=,adMod
17、eUnknown);/Server后是服務(wù)器的計算機(jī)名,Database后是數(shù)據(jù)庫名/這里使用的windows驗(yàn)證,沒有設(shè)置用戶名和密碼,/如果是windows和SQL server混合驗(yàn)證,UID=;PWD=要寫入相應(yīng)的用戶名和密碼catch(_com_error e)AfxMessageBox(數(shù)據(jù)庫連接失敗!);return FALSE; 在exec2Dlg.cpp文件中添加代碼。在#endif下面添加如下代碼: extern CExec2App theApp; / 在此引用應(yīng)用類中的theApp來獲取庫連接指針在BOOL CExec2Dlg:OnInitDialog()函數(shù)中添加如下代
18、碼:/ TODO: Add extra initialization here/使用ADO創(chuàng)建數(shù)據(jù)庫記錄集m_pRecordset.CreateInstance(_uuidof(Recordset);/ 在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/ 因?yàn)樗袝r會經(jīng)常出現(xiàn)一些想不到的錯誤trym_pRecordset-Open(SELECT * FROM s, / 查詢s表中所有字段theApp.m_pConnection.GetInterfacePtr(), / 獲取庫接庫的IDispatch指針adOpenDynamic,adLockOptimistic,adCmd
19、Text);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();至此,與ADO相關(guān)的代碼都已添加完了。下面在exec2Dlg.cpp文件中添加應(yīng)用代碼。(4)與功能相關(guān)的代碼設(shè)計在界面上用到列表框,當(dāng)鼠標(biāo)點(diǎn)擊列表框的某一行時,其中的數(shù)據(jù)能夠在編輯框中顯示出來,這要用到列表框的一個函數(shù)。添加此函數(shù)的方法如下:摁住Ctrl和w鍵,進(jìn)入類向?qū)?,如圖21所示。圖21選擇IDC_LIST,在右邊的Messages下面選擇LBN_SELCHANGE,然后點(diǎn)擊“Add Function”按鈕,最后點(diǎn)擊“確定”按鈕,即為列表框添加了此函數(shù)。具體代碼如下:/名稱
20、:OnSelchangeList/功能:當(dāng)每次選擇新的記錄時,都會移動指針到新的記錄位置并將值顯示出來void CExec2Dlg:OnSelchangeList() int curSel = m_list.GetCurSel();_variant_t var,varIndex;if(curSel MoveFirst();m_pRecordset-Move(long(curSel);var = m_pRecordset-GetCollect(sname);if(var.vt != VT_NULL)m_sname = (LPCSTR)_bstr_t(var);var = m_pRecordset
21、-GetCollect(age);if(var.vt != VT_NULL)m_age=(LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(sno);if(var.vt != VT_NULL)m_sno = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(dept);if(var.vt != VT_NULL)m_dept = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(comment);if(var.vt != VT_NULL)m_c
22、omment = (LPCSTR)_bstr_t(var);UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();將數(shù)據(jù)庫中的數(shù)據(jù)顯示在列表框中,添加函數(shù)ListData()。添加的方法是,在工作區(qū)左邊的樹型結(jié)構(gòu)中,選擇ClassView,右鍵單擊CExec2Dlg,在彈出的菜單中選擇Add Member Function,出現(xiàn)如圖22所示的窗口,類型為void,函數(shù)描述為ListData()。圖22此函數(shù)的具體代碼如下:/名稱:ListData/功能:將數(shù)據(jù)庫中的數(shù)據(jù)顯示在列表框中void CExec2Dlg
23、:ListData() _variant_t var;CString strname,strage,strsno,strdept,strcom;/清空列表框m_list.ResetContent();strname=strage=strsno=strdept=strcom=;/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因?yàn)樗袝r會經(jīng)常出現(xiàn)一些想不到的錯誤。tryif(!m_pRecordset-BOF)m_pRecordset-MoveFirst();elseAfxMessageBox(表內(nèi)數(shù)據(jù)為空);return;/ 讀入庫中各字段并加入列表框中while(!m_
24、pRecordset-adoEOF)var = m_pRecordset-GetCollect(sno);if(var.vt != VT_NULL)strsno = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(sname);if(var.vt != VT_NULL)strname = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(age);if(var.vt != VT_NULL)strage = (LPCSTR)_bstr_t(var);var = m_pRecordset-Ge
25、tCollect(dept);if(var.vt != VT_NULL)strdept = (LPCSTR)_bstr_t(var);var = m_pRecordset-GetCollect(comment);if(var.vt != VT_NULL)strcom = (LPCSTR)_bstr_t(var);m_list.AddString( strsno + - +strname + - +strage+ - + strdept+ - + strcom);m_pRecordset-MoveNext();/ 默認(rèn)列表指向第一項(xiàng),同時移動記錄指針并顯示m_list.SetCurSel(0);
26、OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();插入按鈕對應(yīng)的函數(shù)代碼如下:/名稱:OnWritedata/功能:將編輯框中輸入的學(xué)生信息插入到s表中void CExec2Dlg:OnWritedata() UpdateData();if(m_sname = | m_sno = )AfxMessageBox(學(xué)號和姓名信息不能為空!);return;/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因?yàn)樗袝r會經(jīng)常出現(xiàn)一些想不到的錯誤。try/ 寫入各字段值m_pRecordset-
27、AddNew();m_pRecordset-PutCollect(sno, _variant_t(m_sno);m_pRecordset-PutCollect(sname, _variant_t(m_sname);m_pRecordset-PutCollect(age, atol(m_age);m_pRecordset-PutCollect(dept, _variant_t(m_dept);m_pRecordset-PutCollect(comment, _variant_t(m_comment);m_pRecordset-Update();AfxMessageBox(插入成功!);/ 更新顯
28、示其庫內(nèi)容int nCurSel = m_list.GetCurSel();ListData();m_list.SetCurSel(nCurSel);/ 移動記錄指針到新的位置OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();修改按鈕對應(yīng)的函數(shù)代碼如下:/名稱:OnModify/功能:修改學(xué)生信息void CExec2Dlg:OnModify() UpdateData(); / 更新對話框數(shù)據(jù)if(m_list.GetCount() = 0)AfxMessageBox(表中記錄數(shù)為空!);return;el
29、se if(m_list.GetCurSel() m_list.GetCount()m_list.SetCurSel(0);/ 修改當(dāng)前記錄的字段值trym_pRecordset-PutCollect(sno, _variant_t(m_sno);m_pRecordset-PutCollect(sname, _variant_t(m_sname);m_pRecordset-PutCollect(age, atol(m_age);m_pRecordset-PutCollect(dept, _variant_t(m_dept);m_pRecordset-PutCollect(comment, _v
30、ariant_t(m_comment);m_pRecordset-Update();/ 重新讀入庫記錄更新顯示int nCurSel = m_list.GetCurSel();ListData();m_list.SetCurSel(nCurSel);/ 移動記錄指針到新的位置OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();刪除按鈕對應(yīng)的函數(shù)代碼如下:/名稱:OnDelete/功能:刪除選中的學(xué)生信息void CExec2Dlg:OnDelete() if(m_list.GetCount() = 0)ret
31、urn;else if(m_list.GetCurSel() m_list.GetCount()m_list.SetCurSel(0);try/ 刪除當(dāng)前行記錄m_pRecordset-Delete(adAffectCurrent);m_pRecordset-Update();/ 刪除列表中當(dāng)前值int nCurSel = m_list.GetCurSel();m_list.DeleteString(nCurSel);if(nCurSel = 0 & (m_list.GetCount() != 0)m_list.SetCurSel(nCurSel);else if(m_list.GetCount() != 0)m_list.SetCurSel(nCurSel-1);/ 移動記錄指針到新的位置OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();查詢按鈕對應(yīng)的函數(shù)代碼如下:/名稱:O
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掛車租出合同6篇
- 場地有償使用合同7篇
- 公寓式房屋轉(zhuǎn)租合同
- 廣告制作安裝合同書
- 臨街商鋪?zhàn)赓U合同
- 工程降水分包合同
- 土地利用規(guī)劃的制定與執(zhí)行指導(dǎo)書
- 員工租賃車輛協(xié)議
- 信封印刷合同6篇
- 圍墻工程包工合同
- 高三二輪復(fù)習(xí)備考指導(dǎo)意見
- 港口散裝液體危險化學(xué)品港口經(jīng)營人的裝卸管理人員從業(yè)資格考試
- 2023年四川省公務(wù)員考試行測真題及答案解析
- 日本商務(wù)禮儀課件
- 中國民間傳說:田螺姑娘
- 淺談鋼琴即興伴奏在教學(xué)中應(yīng)用現(xiàn)狀及提高方法 論文
- 身體功能訓(xùn)練
- 部編人教版四年級語文下冊《全冊全套》課件ppt
- 英文版-你來比劃我來猜游戲
- 皖2015s209 混凝土砌塊式排水檢查井
- 五年級道德與法治下冊 (我參與我奉獻(xiàn))新課件
評論
0/150
提交評論