版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
通過ODBC連接數(shù)據(jù)庫(C++)C++連接數(shù)據(jù)庫的方法有很多種,在VisualC++和SQLserver的實際開發(fā)中,一般使用ODBC或ADO技術進行開發(fā),相關技術和產(chǎn)品也最為成熟。我們這里根據(jù)課程需要采用ODBC的方法。我使用的平臺的是VS2010和SQLserver2008,優(yōu)點是VS2010支持一些比較新的特性,編程方便了很多,缺點是左側(cè)的“服務器資源管理器”不支持SQLserver2000,但是沒有關系,在SQLserver2008上是可以連上的,大家如果和我的平臺不一樣的話在編程細節(jié)上可能有些問題要注意下。有同學表示安裝了SQLserver2008之后只能通過“windows身份驗證”登陸本地數(shù)據(jù)庫,無法通過“SQLServer身份驗證”登陸,這是由于安裝的時候是通過“windows身份驗證”安裝的,改一下配置即可:1.使用“windows身份驗證”登陸數(shù)據(jù)庫,點擊“登錄名”,右擊sa,1.使用“windows身份驗證”登陸數(shù)據(jù)庫,點擊“登錄名”,右擊sa,三帛規(guī)曹月艮務器角邑手用戶映射狀態(tài)設置是否允許連接到數(shù)據(jù)庫引擎:*授予⑥拒絕?登錄:*啟用建)禁用匿'J選擇屬性,點擊狀
態(tài),確保設置如
左側(cè)圖所示。2.右擊本地服務器名選擇屬性,更改安全性中的服務器身份驗證如下圖所示驀〔。),者皆翌盤|「日做?PC:舊QL喝wr1D.D,W53J.-11.+口救據(jù)奔河E艮努靠.尾性-gU2UKEN-PC3.選擇頁有常規(guī)育內(nèi)存曹處理器安全性3連接數(shù)據(jù)庫設置育高級專權限鄧腳本,虻待助服務器身份驗證Windows身份驗證模式也)aSQLServer和Windows3.選擇頁有常規(guī)育內(nèi)存曹處理器安全性3連接數(shù)據(jù)庫設置育高級專權限鄧腳本,虻待助服務器身份驗證Windows身份驗證模式也)aSQLServer和Windows身份驗證模式W)右擊地服務器名選擇重新啟動(這一部很重要)打開SQLserver2008連接一個我們測試用的數(shù)據(jù)庫,使用的10.214.6.98上的數(shù)據(jù)庫db27,用戶名和密碼都是user277,執(zhí)行以下命令:usedb27CREATETablebook(bnochar(8),categorychar(10),titlevarchar(40)notnull,pressvarchar(30)notnull,byearintCHECK(byear>0),authorvarchar(20)notnull,pricedecimal(7,2)CHECK(price>0),totalintCHECK(total>=0),stockintCHECK(stock>=0),CONSTRAINTckCHECK(stock<=total))INSERTINTObookVALUES('12345678','數(shù)據(jù)庫','數(shù)據(jù)庫系統(tǒng)原理教程','清華大學出版社',1998,'王珊',27.9,3,0)INSERTINTObookVALUES('12342378','數(shù)據(jù)庫','數(shù)據(jù)庫','清華大學出版社',1998,'王珊',27.9,3,0INSERTINTObookVALUES('12341278','數(shù)據(jù)庫','數(shù)據(jù)庫','清華大學出版社',1998,'王珊',27.9,3,0INSERTINTObookVALUES('14345678','數(shù)據(jù)庫','數(shù)據(jù)庫','清華大學出版社',1998,'王珊',27.9,3,0上面SQL語句執(zhí)行的結(jié)果是在db27數(shù)據(jù)庫中創(chuàng)建了一個名為book的表,里面有9列,隨后添加了4個測試數(shù)據(jù),現(xiàn)在將該數(shù)據(jù)源添加到ODBC數(shù)據(jù)源管理器中,打開路徑“控制面板\所有控制面板項'管理工具”下的數(shù)據(jù)源(ODBC),添加新的數(shù)據(jù)源,選擇“SQLServer"名稱設置為db27,服務器在10.214.6.98,使用user277用戶登錄,完成后點擊測試數(shù)據(jù)源看能不能連上,顯示測試成功后,在用戶數(shù)據(jù)源中會看到剛剛添加的DSN:
我們編寫一個簡單的圖形化界面,打開VS2010,新建項目,選擇“MFC應用程序”,建立一個名為“DataBaseODBC”的項目,彈出的向?qū)е懈膽贸绦蝾愋蜑椤盎趯υ捒颉保蠹以趯嶋H編程中可以需要選擇,這里只是為了做個示例,其他保持默認。點擊工具箱中“ListControl”空間,拖到面板中,完成之后應該是下圖這個樣子:血StaticText曜四一ffl±±整亙Ii=H竺凝國二=:翌旦一PictureControlHorizontalScrollBarVerticalScrollBarSliderControlSpinControlProgressControlHotKeyListControlTreeControlTabControlAnimationControlRichEdit2.0ControlDateTimePickerMonthCalendarCo...IPAddress血StaticText曜四一ffl±±整亙Ii=H竺凝國二=:翌旦一調(diào)整控件的view屬性為Report,如下圖所示,控件的樣式會有相應的改變。
屋性StaticEdgeFalseTransparentFalse其中之一;囹標口8仇小圖標r?;mallFmnl有屠「I;qfl福韋「R右擊ListControl,添加變量,在對話框中輸入名稱,如m_ListCtrl將這個ListControl設置成9列,并設置一些格式:I&C.LCST1(ListControl)IListE.-萼zBJU/CRectrc;m_ListCtrl.GetWindowRect(&rc);〃獲取控件大小//設置了9列,大小是一樣的m_ListCtrl.InsertColumn(0,_T("書號"),LVCFMT_CENTER,rc.Size().cx/9,0);m_ListCtrl.InsertColumn(1,_T("類別)LVCFMT_CENTER,rc.Size().cx/9,1);m_ListCtrl.InsertColumn(2,_T("書名"),LVCFMT_CENTER,rc.Size().cx/9,2);m_ListCtrl.InsertColumn(3,_T("出版社"),LVCFMT_CENTER,rc.Size().cx/9,3);m_ListCtrl.InsertColumn(4,_T("出版年份"),LVCFMT_CENTER,rc.Size().cx/9,4);m_ListCtrl.InsertColumn(5,_T("作者"),LVCFMT_CENTER,rc.Size().cx/9,5);m_ListCtrl.InsertColumn(6,_T("價格)LVCFMT_CENTER,StaticEdgeFalseTransparentFalse其中之一;囹標口8仇小圖標r?;mallFmnl有屠「I;qfl福韋「R右擊ListControl,添加變量,在對話框中輸入名稱,如m_ListCtrl將這個ListControl設置成9列,并設置一些格式:LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_TWOCLICKACTIVATE);把這些代碼放在BOOLCDataBaseODBCDlg::OnInitDialog()函數(shù)的return前,運行就有相應的效果。在頭文件DataBaseODBCDlg.h中添加#include"afxdb.h","afxdb.h"即MFC的ODBC類包括以下要用到的類:CDatabase類:主要功能是建立與數(shù)據(jù)源的連接。CRecordset類:該類代表從數(shù)據(jù)源選擇的一組記錄(記錄集),程序可以選擇數(shù)據(jù)源中的某個表作為一個記錄集,也可以通過對表的查詢得到記錄集,還可以合并同一數(shù)據(jù)源中多個表的列到一個記錄集中.通過該類可對記錄集中的記錄進行滾動、修改、增加和刪除等操作。CDBException類:代表ODBC類產(chǎn)生的異常。概括地講,CDatabase針對某個數(shù)據(jù)庫,它負責連接數(shù)據(jù)源;CRecordset針對數(shù)據(jù)源中的記錄集,它負責對記錄的操作。在頭文件中添加一些定義,其中CDBVariant對象表示用于MFCODBC類的可變數(shù)據(jù)類型。private:CDatabasem_db;public://將CDBVariant轉(zhuǎn)化成字符串CStringVariantToCString(CDBVariant*var);為了方便,我就不添加新的按鈕,雙擊對話框的“確定”按鈕,進入函數(shù),注釋掉里面的OnOK函數(shù),添加如下代碼://連接數(shù)據(jù)庫,打開數(shù)據(jù)源,這里的DSN就是之前在ODBC中設置的DSNif(!m_db.IsOpen()&&!m_db.OpenEx(_T("DSN=db27;UID=user277;PWD=user277"),CDatabase::openReadOnly|CDatabase::noOdbcDialog))(MessageBox(L"連接錯誤!");return;)//CRecordset類:代表從數(shù)據(jù)源選擇一組記錄(記錄集)CRecordsetm_set(&m_db);//Open方法打開記錄集m_set.Open(CRecordset::forwardOnly,_T("SELECT*frombook"),CRecordset::readOnly);CDBVariantvar;//記錄有數(shù)據(jù)的類型和數(shù)據(jù)的值,它封閉了VARIANT數(shù)據(jù)類型m_ListCtrl.DeleteAllItems();〃刪除所有的項目shortnFields=m_set.GetODBCFieldCount();//得到列的數(shù)目inti=0;〃添加所有內(nèi)容到控件while(!m_set.IsEOF())(for(shortindex=0;index<nFields;index++)(m_set.GetFieldValue(index,var);//dosomethingwithvarValue〃添加一行記錄if(index==0)m_ListCtrl.InsertItem(i,VariantToCString(&var));〃繼續(xù)增加記錄的其他項elsem_ListCtrl.SetItemText(i,index,VariantToCString(&var));)m_set.MoveNext();i++;)m_set.Close();//凡打開m_db.Close();//皆關閉VariantToCSting函數(shù)將CDBVariantX對象轉(zhuǎn)成CString,用以顯示。CStringCDataBaseODBCDlg::VariantToCString(CDBVariant*var)(CStringstr;〃轉(zhuǎn)換以后的字符串if(!var)(str="NULLVarParameter";returnstr;switch(var->m_dwType){caseDBVT_SHORT:str.Format("%d",in)var->m_iVal);break;caseDBVT_LONG:str.Format("%d",var->m_lVal);break;caseDBVT_SINGLE:str.Format("%10.6f”,double)var->m_fltVal);break;caseDBVT_DOUBLE:str.Format("%10.6f”,var->m_dblVal);break;caseDBVT_BOOL:str=(var->m_boolVal==0)"FALSE”:"TRUE";break;caseDBVT_STRING:str=var->m_pstring->GetBuffer();break;caseDBVT_ASTRING:str=var->m_pstringA->GetBuffer();break;caseDBVT_WSTRING:str=var->m_pstringW->GetBuffer();break;caseDBVT_DATE:str.Format("%d-%d-%d”,(var-〉m_pdate)-〉year,(var-〉m_pdate)-〉month,(var-〉m_pdate)-〉da);break;defaul:str.Format("Unktype%d\n”var-〉m_dwType);TRACE(L"Unknowntype%d\n”,var-〉m_dwType);}returnstr;}根據(jù)CDBVarian里的m_dwType屬性可以知道里面的內(nèi)容是什么類型的,然后對應的顯示就OKY,其中DBVT_DATA屬性可以根據(jù)需要自己更改格式。至此,運行程序,點擊“確定”按鈕就能看到圖示結(jié)果,可以完成查詢工作了。
不妨再添加一個“button”控件用以添加記錄,從工具集中拖一個button控件,雙擊標記代碼:voidCDataBaseODBCDlg::OnBnClickedBtnadd()(//TODO:在此添加控件通知處理程序代碼if(!m_db.IsOpen()&&!m_db.OpenEx(_T("DSN=db27;UID=user277;PWD=user277"),CDatabase::openReadOnly|CDatabase::noOdbcDialog))(MessageBox(L"連接錯誤!");return;)try(m_db.ExecuteSQL(_T("INSERTINTObookVALUES")_T("('87654321','其他','其他1','浙江大學出版社',1984,'韓寒',12.9,4,2)"));)catch(CDBException*pe)//Theerrorcodeisinpe->m_nRetCodepe->ReportError();pe->Delete();m_db.Close();
運行后,點擊新添加的按鈕可以增加一條記錄。再添加一個可以實現(xiàn)刪除的button,雙擊之后添加代碼如下。POSITIONpos=m_ListCtrl.GetFirstSelectedItemPosition();if(pos==NULL)(TRACE(_T("Noitemswereselected!\n"));)else(while(pos)(〃得到選中的itemintnItem=m_ListCtrl.GetNextSelectedItem(pos);TRACE(_T("Item%dwasselected!\n"),nItem);//youcoulddoyou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)化消防工程安裝協(xié)議范本(2024年版)版
- 2025年度廠區(qū)新能源發(fā)電項目合作協(xié)議3篇
- 2025年度電商大數(shù)據(jù)安全保護合作協(xié)議4篇
- 旅游業(yè)績深度剖析
- 專業(yè)汽車起重機租賃協(xié)議2024版范本版B版
- 二零二五年度智能化家居系統(tǒng)安裝合同3篇 - 副本
- 二零二五年度大渡口區(qū)吸污車租賃與環(huán)保技術研發(fā)協(xié)議3篇
- 2025年度測井設備研發(fā)與技術服務合同4篇
- 二零二五年度船舶航行安全GPS監(jiān)控合同文本3篇
- 2025年度公共場所場地借用及安全保障協(xié)議書2篇
- 品質(zhì)經(jīng)理工作總結(jié)
- 供電搶修述職報告
- 集成電路設計工藝節(jié)點演進趨勢
- 新型電力系統(tǒng)簡介演示
- 特種設備行業(yè)團隊建設工作方案
- 眼內(nèi)炎患者護理查房課件
- 肯德基經(jīng)營策略分析報告總結(jié)
- 買賣合同簽訂和履行風險控制
- 中央空調(diào)現(xiàn)場施工技術總結(jié)(附圖)
- 水質(zhì)-濁度的測定原始記錄
- 數(shù)字美的智慧工業(yè)白皮書-2023.09
評論
0/150
提交評論