通過ODBC連接數(shù)據(jù)庫_第1頁
通過ODBC連接數(shù)據(jù)庫_第2頁
通過ODBC連接數(shù)據(jù)庫_第3頁
通過ODBC連接數(shù)據(jù)庫_第4頁
通過ODBC連接數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

通過ODBC連接數(shù)據(jù)庫(C++)C++連接數(shù)據(jù)庫的方法有很多種,在VisualC++和SQLserver的實際開發(fā)中,一般使用ODBC或ADO技術進行開發(fā),相關技術和產(chǎn)品也最為成熟。我們這里根據(jù)課程需要采用ODBC的方法。我使用的平臺的是VS2010和SQLserver2008,優(yōu)點是VS2010支持一些比較新的特性,編程方便了很多,缺點是左側的“服務器資源管理器”不支持SQLserver2000,但是沒有關系,在SQLserver2008上是可以連上的,大家如果和我的平臺不一樣的話在編程細節(jié)上可能有些問題要注意下。有同學表示安裝了SQLserver2008之后只能通過“windows身份驗證”登陸本地數(shù)據(jù)庫,無法通過“SQLserver身份驗證”登陸,這是由于安裝的時候是通過“windows身份驗證”安裝的,改一下配置即可:1.使用“windows身份驗證”登陸數(shù)據(jù)庫,點擊“登錄名”,右擊sa,朋務器角色彎用戶映射1.使用“windows身份驗證”登陸數(shù)據(jù)庫,點擊“登錄名”,右擊sa,朋務器角色彎用戶映射選擇屬性,點擊狀態(tài),確保設置如設置狀態(tài)是否允許連接到數(shù)據(jù)庫引擎:左側圖所示。2.右擊本地服登錄:日服務韻1性-KOUEOUKEN-PC:拒絕登錄:日服務韻1性-KOUEOUKEN-PC:拒絕?務器名選擇屬性,更改安全性中的服務器身份驗證如下圖所示迭擇頁青常規(guī)j*內存迭擇頁青常規(guī)j*內存舀處理器安全性滬;車t辛宙數(shù)據(jù)庫設置旨高級旨權限蜀腳本-門幫助朋務器身悅驗證 Windows身儲驗證欖式纜)aSQLServer和Windows身份驗證複式富)3.右擊地服務器名選擇重新啟動(這一部很重要)4.如何還有問題的話查看目錄“D:\ProgramFiles'MicrosoftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\Log”下的ERRORLOG文件,找到錯誤代碼,google之打開SQLserver2008連接一個我們測試用的數(shù)據(jù)庫,使用的10.214.6.98上的數(shù)據(jù)庫db27,用戶名和密碼都是user277,執(zhí)行以下命令:usedb27CREATETablebnocategorytitlepressbyearauthorpricetotalstockbookCREATETablebnocategorytitlepressbyearauthorpricetotalstockchar(8),char(10),varchar(40)notnull,varchar(30)notnull,intCHECK(byear>0),varchar(20)notnull,decimal(7,2)CHECK(price>0),intCHECK(total>=0),intCHECK(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,0)INSERTINTObookVALUES('12341278','數(shù)據(jù)庫','數(shù)據(jù)庫','清華大學出版社',1998,'王珊',27.9,3,0)INSERTINTObookVALUES('14345678','數(shù)據(jù)庫','數(shù)據(jù)庫','清華大學出版社',1998,'王珊',27.9,3,0)上面SQL語句執(zhí)行的結果是在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”的項目,彈出的向導中更改應用程序類型為“基于對話框”大家在實際編程中可以需要選擇,這里只是為了做個示例,其他保持默認。點擊工具箱中“ListControl”空間,拖到面板中,完成之后應該是下圖這個樣子:調整控件的view屬性為Report,如下圖所示,控件的樣式會有相應的改變。Jil7$StaticJil7$StaticEdgeFalse>TransparentFalse1Vie--/?IconEJ題[con(NsmeJGroupSmallIw-nListIO.—Reportview具中之一;團標(:TrnnlXIcon),小團標5ilWriktiI&C.LCST1(ListControl)IListE*右擊ListContr,l添加變量,在對話框中輸入名稱,如m_ListCtrl將這個ListContrO設置成9列,并設置一些格式:CRectrc;m_ListCtrl.GetWindowRect(&rc);/獲取控件大小//殳置了9列,大小是一樣的mListCtrl.InsertColumn(0,"書號"),LVCFMTCENTER,rc.Size().cx/9,0);m_ListCtrl.lnsertColumn(1,_T("類別”),LVCFMT_CENTER,rc.Size().cx/9,1);m_ListCtrl.lnsertColumn(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,rc.Size().cx/9,6);m_ListCtrl.InsertColumn(7,_T("總藏書量"),LVCFMT_CENTER,rc.Size().cx/9,7);m_ListCtrl.InsertColumn(8,_T("目前庫存數(shù)"),LVCFMT_CENTER,rc.Size().cx/9,8);〃LVS_EX_GRIDLINES是希望顯示網(wǎng)格;〃LVS_EX_FULLROWSELECT是希望被選中時整行反色顯示;〃LVS_EX_HEADERDRAGDROP是讓其支持點擊表頭排序;〃LVS_EX_TWOCLICKACTIVATE是希望有鼠標在未被選中的行上移動的時候有一些效果m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_TWOCLICKACTIVATE);把這些代碼放在BOOLCDataBaseODBCDIg::OnlnitDialog()函數(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轉化成字符串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.DeleteAllltems();〃刪除所有的項目shortnFields=m_set.GetODBCFieldCount();〃得到列的數(shù)目inti=0;〃添加所有內容到控件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寸象轉成CString,用以顯示。CStringCDataBaseODBCDlg::VariantToCString(CDBVariant*var){CStringstr;//轉換以后的字符串if(!var){str="NULLVarParameter";returnstr;}switch(var->m_dwType){caseDBVT_SHORT:str.Format(L"%d",(int)var->m」Val);break;caseDBVT_LONG:str.Format(L"%d",var->m_IVal);break;caseDBVT_SINGLE:str.Format(L"%10.6f",(double)var->m_fltVal);break;caseDBVT_DOUBLE:str.Format(L"%10.6f",var->m_dblVal);break;caseDBVT_BOOL:str=(var->m_boolVal==0)?L"FALSE":L"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(L"%d-%d-%d",(var->m_pdate)->year,(var->m_pdate)->month,(var->m_pdate)->day);break;default:str.Format(L"Unktype%d\n",var->m_dwType);TRACE(L"Unknowntype%d\n",var->m_dwType);}returnstr;}根據(jù)CDBVariant里的m_dwType屬性可以知道里面的內容是什么類型的,然后對應的顯示就OK了,其中DBVT_DATA屬性可以根據(jù)需要自己更改格式。至此,運行程序,點擊“確定”按鈕就能看到圖示結果,可以完成查詢工作了。

書號類別書名出版社出版…作者價格總藏??"目刖??“12341...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903012342...埶據(jù)…埶據(jù)…濟華…1998王珊27.903012345...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903014345...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.9030島DataBaseODBC確定 取消不妨再添加一個“button”控件用以添加記錄,從工具集中拖一個button控件,雙擊標記代碼:voidCDataBaseODBCDIg::OnBnClickedBtnadd(){//TODO:在此添加控件通知處理程序代碼if(!m_db.lsOpen()&&!m_db.OpenEx(_T("DSN=db27;UID=user277;PWD=user277"),CDatabase::openReadOnIy|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();}mdb.Close();

書號類別書名出版社出版…作者價格總藏"""目刖…12341...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903012342...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903012345...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903014345...數(shù)據(jù)…數(shù)據(jù)…濟華…1998王珊27.903087&54...其他…其他1浙江…1984韓寒12.90斗2島DataBaseODBC増加 確定 取消運行后,點擊新添加的按鈕可以增加一條記錄。再添加一個可以實現(xiàn)刪除的button,雙擊之后添加代碼如下。運行后,點擊新添加的按鈕可以增加一條記錄。POSITIONpos=m_ListCtrl.GetFirstSelectedltemPosition();if(pos==NULL){TRACE(_T("Noitemswereselected!'"'));}else{while(pos){〃得到選中的itemintnltem=m_ListCtrl.GetNextSelectedItem(pos);TRACE(_T("Item

溫馨提示

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

評論

0/150

提交評論