VC++環境下連接SQL-Server數據庫方法-實驗六_第1頁
VC++環境下連接SQL-Server數據庫方法-實驗六_第2頁
VC++環境下連接SQL-Server數據庫方法-實驗六_第3頁
VC++環境下連接SQL-Server數據庫方法-實驗六_第4頁
VC++環境下連接SQL-Server數據庫方法-實驗六_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上精選優質文檔-傾情為你奉上專心-專注-專業專心-專注-專業精選優質文檔-傾情為你奉上專心-專注-專業VC+環境下連接SQL Server數據庫方法指導實驗類型:設計型一、實驗環境1Windows XP操作系統;2VC+6.0開發環境;3SQL server 2000數據庫管理系統。二、實驗內容和要求利用VC開發應用程序,要求能夠通過界面完成對數據庫中數據的查詢、插入、刪除以及修改。三、實驗原理VC訪問SQL Server數據庫,常用的方法有兩種:通過ODBC連接和通過ADO連接。下面分別介紹一下。采用ODBC方式要求先創建ODBC數據源,應用程序通過數據源與數據庫連接

2、;并且在創建應用程序時,只能是基于單文檔或多文檔,而無法直接創建基于對話框的應用程序。采用ADO方式無需創建數據源,應用程序可通過ADO直接與數據庫連接;ADO方式可以創建基于對話框的應用程序。兩種方式都要在應用程序中添加代碼以完成相應的初始化功能。四、實驗步驟下面通過兩個例子分別介紹基于ODBC方式和基于ADO方式的實驗步驟。1 基于ODBC方式的實驗步驟(1)在SQL Server2000中創建數據庫student,該數據庫中有學生表s用來存放學生信息。s表的結構如下:屬性名類型是否為主鍵允許空備注snochar(8)是學號snamevarchar(10)否姓名ageint否年齡deptc

3、har(4)否所在系號commentvarchar(8)否評語 s表的創建方法在此不詳述。(2)創建ODBC數據源“開始”-“設置”-“控制面板”“管理工具”“數據源(ODBC)”,打開之后出現如圖1所示窗口。圖1點擊“添加”按鈕,出現圖2。圖2選擇SQL Server,點擊“完成”,出現圖3。圖3名稱中填寫所創建的數據源的名稱,本例中為student,描述可以不填。因為SQL Server的服務器和客戶端均安裝在本地計算機上,所以服務器為(local)。如果本地計算機上只安裝了客戶端,服務器安裝在另外的機器上,服務器為另一臺機器的名稱。點擊“下一步”,出現圖4。圖4SQL Server如何驗

4、證ID的真偽,使用哪種方法要看安裝SQL Server2000時選擇的是哪種驗證方式。如果是Windows驗證,選擇使用網絡登錄ID的Windows NT驗證;如果是混合驗證模式則要選擇下面一種。本例中采用Windows驗證。進入數據庫無需另外的用戶名和密碼。點擊“下一步”,出現圖5。圖5這里要更改默認的數據庫,默認情況下數據源所連接的數據庫為master,這里要改為student數據庫。點擊“下一步”,出現圖6。圖6這里無需修改,點擊“完成”出現圖7。圖7點擊“測試數據源”,如果測試成功說明數據源已成功創建。(3)創建VC應用程序。打開VC+6.0,新建工程,如圖8所示。選擇MFC AppW

5、izard(exe),工程名為exec1,存放在D盤實驗文件夾里。圖8點擊“確定”,在出現的窗口中選擇“單文檔”,點擊“下一步”,出現圖9。圖9這里選擇“查看數據庫不使用文件支持”,還要選擇數據源,點擊“數據源”,彈出如圖10所示窗口。圖10選擇“student”數據源,點擊“OK”,在彈出的窗口中選擇表dbo.s,點擊“OK”返回圖9所示的界面。以后的創建步驟中沒有需要修改的地方可以直接點擊完成。這樣工程exec1就創建完成了,并且通過數據源與數據庫發生了關聯。創建好的工程可以運行,結果如圖11所示。圖11(4)界面設計在工作區左邊的樹型結構中,選擇ResourceView,展開Dialog

6、節點,雙擊IDD_EXEC1_FORM,打開該對話框。在這里添加所需控件。如圖12所示。圖12此時運行程序,結果如圖13所示。下一記錄圖13從界面可以看出程序要完成的功能。完整的程序運行后,界面默認顯示表中的第一條數據,點擊工具欄中的“下一記錄”可以顯示下一條記錄;點擊“刪除”按鈕可將當前顯示的數據從庫中刪除;點擊“清除”按鈕,將所有編輯框清空;在界面輸入學生信息,點擊“添加”按鈕可將此學生信息輸入至數據庫;點擊“修改”按鈕可修改當前顯示的學生信息。為界面上的編輯框和按鈕添加變量和函數。在界面右鍵單擊,選擇“建立類向導”,彈出如圖14所示窗口。圖14本例中需要為編輯框IDC_AGE, IDC_

7、COMMENT, IDC_DEPARTMENT, IDC_NAME, IDC_SNO添加變量。以IDC_AGE為例,點擊“ADD Variable”彈出如圖15所示窗口。圖15在下拉框中選擇m_pSet-m_age為變量名,這里的變量是與數據庫表s中的字段相對應的,變量類型也與s中的字段類型對應。其它變量的添加方法相同。為按鈕添加函數比較簡單,雙擊按鈕即可。添加的函數在exec1View.cpp文件中。(5)代碼設計“清除”按鈕所添加的函數為OnClear(),具體代碼如下:/名稱:OnClear/功能:清除編輯框中的內容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(); “添加”按鈕所添加的函數為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(輸入的年齡不符合實際!);return;/呈增加狀態m_pSet-AddNew(); UpdateData();/更新數據庫 m_pSet-Up

10、date();/重新獲得數據 m_pSet-Requery(); UpdateData(FALSE);“刪除”按鈕所添加的函數為OnDelete(),具體代碼如下:/名稱:OnDelete/功能:刪除當前記錄void CExec1View:OnDelete() / TODO: Add your control notification handler code here/發出刪除命令 m_pSet-Delete();/重新獲得記錄集 m_pSet-Requery(); UpdateData(FALSE);“修改”按鈕所添加的函數為OnEdit(),具體代碼如下:/名稱:OnEdit/功能:修改

11、當前記錄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(輸入的年齡不符合實際!);return;/呈編輯狀態m_pSet-Edit();UpdateData();/更新數據庫m_pSet-Update();/重新獲得記錄集m_pSet

12、-Requery();UpdateData(FALSE);(6)運行結果圖162基于ADO方式的實驗步驟此例中所用數據庫與上例中相同;此例中無需創建數據源。(1)創建VC應用程序打開VC+6.0,新建工程。選擇MFC AppWizard(exe),工程名為exec2,存放在D盤實驗文件夾里。點擊“確定”,在彈出的窗口中選擇“基本對話框”,以后的步驟沒有需要修改的地方,可以直接點擊“完成。”這樣一個基于基本對話框的工程就創建好了。(2)界面設計在工作區左邊的樹型結構中,選擇ResourceView,展開Dialog節點,雙擊IDD_EXEC2_DIALOG,打開該對話框。在這里添加所需控件。如圖

13、17所示。圖17為編輯框和列表框添加變量。在界面右鍵單擊,選擇“建立類向導”,彈出如圖18所示窗口。圖18本例中需要為編輯框IDC_AGE, IDC_COMMENT, IDC_DEPT, IDC_NAME, IDC_SNO,列表框IDC_LIST添加變量。以IDC_AGE為例,點擊“ADD Variable”彈出如圖19所示窗口。圖19這里變量名為m_age,類型可從下拉框里選。添加變量完成之后類向導如圖20所示。圖20為按鈕添加函數,雙擊按鈕可為其添加函數,在exec2Dig.cpp文件里。(3)與ADO相關的代碼設計引入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;該指針為整個應用程序共享,所以放在public下面。定義ADO連接、命令、記錄集變量指針,在exec2Dlg.h文

15、件的class CExec2Dlg : public CDialog方法中添加如下代碼: / 定義ADO連接、命令、記錄集變量指針_ConnectionPtrm_pConnection;_CommandPtrm_pCommand;_RecordsetPtrm_pRecordset;該指針為整個應用程序共享,所以放在public下面。初始化OLE/COM庫環境。必須注意的是,ADO庫是一組COM動態庫,這意味應用程序在調用ADO前,必須初始化OLE/COM庫環境。在MFC應用程序里,一個比較好的方法是在應用程序主類的InitInstance成員函數里初始化OLE/COM庫環境。在本例中,在exe

16、c2.cpp文件的BOOL CExec2App:InitInstance()成員函數里添加如下代碼:/初始化COM,創建ADO連接等操作AfxOleInit();m_pConnection.CreateInstance(_uuidof(Connection);/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因為它有時會經常出現一些想不到的錯誤try /打開本地 Sql Server庫student m_pConnection-Open(driver=SQL Server; Server=lenovo-pc;Database=student;UID=;PWD=,adMod

17、eUnknown);/Server后是服務器的計算機名,Database后是數據庫名/這里使用的windows驗證,沒有設置用戶名和密碼,/如果是windows和SQL server混合驗證,UID=;PWD=要寫入相應的用戶名和密碼catch(_com_error e)AfxMessageBox(數據庫連接失敗!);return FALSE; 在exec2Dlg.cpp文件中添加代碼。在#endif下面添加如下代碼: extern CExec2App theApp; / 在此引用應用類中的theApp來獲取庫連接指針在BOOL CExec2Dlg:OnInitDialog()函數中添加如下代

18、碼:/ TODO: Add extra initialization here/使用ADO創建數據庫記錄集m_pRecordset.CreateInstance(_uuidof(Recordset);/ 在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/ 因為它有時會經常出現一些想不到的錯誤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相關的代碼都已添加完了。下面在exec2Dlg.cpp文件中添加應用代碼。(4)與功能相關的代碼設計在界面上用到列表框,當鼠標點擊列表框的某一行時,其中的數據能夠在編輯框中顯示出來,這要用到列表框的一個函數。添加此函數的方法如下:摁住Ctrl和w鍵,進入類向導,如圖21所示。圖21選擇IDC_LIST,在右邊的Messages下面選擇LBN_SELCHANGE,然后點擊“Add Function”按鈕,最后點擊“確定”按鈕,即為列表框添加了此函數。具體代碼如下:/名稱

20、:OnSelchangeList/功能:當每次選擇新的記錄時,都會移動指針到新的記錄位置并將值顯示出來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();將數據庫中的數據顯示在列表框中,添加函數ListData()。添加的方法是,在工作區左邊的樹型結構中,選擇ClassView,右鍵單擊CExec2Dlg,在彈出的菜單中選擇Add Member Function,出現如圖22所示的窗口,類型為void,函數描述為ListData()。圖22此函數的具體代碼如下:/名稱:ListData/功能:將數據庫中的數據顯示在列表框中void CExec2Dlg

23、:ListData() _variant_t var;CString strname,strage,strsno,strdept,strcom;/清空列表框m_list.ResetContent();strname=strage=strsno=strdept=strcom=;/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因為它有時會經常出現一些想不到的錯誤。tryif(!m_pRecordset-BOF)m_pRecordset-MoveFirst();elseAfxMessageBox(表內數據為空);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();/ 默認列表指向第一項,同時移動記錄指針并顯示m_list.SetCurSel(0);

26、OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();插入按鈕對應的函數代碼如下:/名稱:OnWritedata/功能:將編輯框中輸入的學生信息插入到s表中void CExec2Dlg:OnWritedata() UpdateData();if(m_sname = | m_sno = )AfxMessageBox(學號和姓名信息不能為空!);return;/在ADO操作中建議語句中要常用try.catch()來捕獲錯誤信息,/因為它有時會經常出現一些想不到的錯誤。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、示其庫內容int nCurSel = m_list.GetCurSel();ListData();m_list.SetCurSel(nCurSel);/ 移動記錄指針到新的位置OnSelchangeList();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();修改按鈕對應的函數代碼如下:/名稱:OnModify/功能:修改學生信息void CExec2Dlg:OnModify() UpdateData(); / 更新對話框數據if(m_list.GetCount() = 0)AfxMessageBox(表中記錄數為空!);return;el

29、se if(m_list.GetCurSel() m_list.GetCount()m_list.SetCurSel(0);/ 修改當前記錄的字段值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();刪除按鈕對應的函數代碼如下:/名稱:OnDelete/功能:刪除選中的學生信息void CExec2Dlg:OnDelete() if(m_list.GetCount() = 0)ret

31、urn;else if(m_list.GetCurSel() m_list.GetCount()m_list.SetCurSel(0);try/ 刪除當前行記錄m_pRecordset-Delete(adAffectCurrent);m_pRecordset-Update();/ 刪除列表中當前值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();查詢按鈕對應的函數代碼如下:/名稱:O

溫馨提示

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

評論

0/150

提交評論