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

下載本文檔

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

文檔簡介

1、通過ODBC連接數(shù)據(jù)庫(C+)C+連接數(shù)據(jù)庫的方法有很多種,在Visual C+和SQL server的實(shí)際開發(fā)中,一般使用ODBC或ADO技術(shù)進(jìn)行開發(fā),相關(guān)技術(shù)和產(chǎn)品也最為成熟。 我們這里根據(jù)課程需要采用ODBC的方法。我使用的平臺(tái)的是 VS2010和SQL server 2008,優(yōu)點(diǎn)是 VS2010支持一些比較新的特性, 編程方便了很多,缺點(diǎn)是左側(cè)的“服務(wù)器資源管理器”不支持SQL server 2000,但是沒有關(guān)系,在SQL server 2008上是可以連上的,大家如果和我的平臺(tái)不一樣的話在編程細(xì)節(jié)上可 能有些問題要注意下。有同學(xué)表示安裝了 SQL server 2008 之后只能

2、通過“ windows身份驗(yàn)證”登陸本地?cái)?shù)據(jù)庫,無法通過“ SQLserver身份驗(yàn)證”登陸,這是由于安裝的時(shí)候是通過“windows身份驗(yàn)證”安裝的,改一下配置即可:1.使用“ windows身份驗(yàn)證”登陸數(shù)據(jù)庫,點(diǎn)擊“登錄名”,右擊sa,選擇屬性,點(diǎn)擊狀服勞器角色 呂用戶映射狀態(tài)是否允許連接到埶據(jù)庫引擎*攪予©O拒絕)登錄:O啟用C禁用態(tài),確保設(shè)置如 左側(cè)圖所示。2. 右擊本地服 務(wù)器名選擇屬 性,更改安全性中的服務(wù)器身份 驗(yàn)證如下圖所示甦接QL吿穀3卩匚SQLServer丄6625強(qiáng)二J區(qū)吳器底性-KOMOUICEN-PC器過庫 E規(guī)存理¥據(jù)級限 脈常內(nèi)期茲淳數(shù)高M(jìn)

3、送_r_r計(jì)f 一3 -滬一第一船務(wù)器身份驗(yàn)證Windows身份瞪證揆式0 SQL Server和Windows身份驗(yàn)證櫃我g)4. 如何還有問題的話查看目錄 “ D:Program Files'Microsoft SQL ServerMSSQL10.MSSQLSERVERMSSQLLog ” 下的 ERRORLOG 文件,找到錯(cuò)誤代碼, google 之打開SQL server 2008連接一個(gè)我們測試用的數(shù)據(jù)庫,使用的10.214698上的數(shù)據(jù)庫db27,用戶名和密碼都是 user277,執(zhí)行以下命令:bnochar ( 8),categorychar ( 10),ti tleva

4、rchar (40) not null,pressvarchar ( 30) not null,byearint CHECK( byear > 0 ),authorvarchar ( 20) not null,pricedecimal ( 7, 2) CHECK( prictotalint CHECK( total>= 0 ),stockint CHECK( stock >= 0 ),CONSTRAINTck CHECK( stock <= totalbook ()use db27 CREATE Table> 0 ),bookVALUES,數(shù)據(jù)庫,數(shù)據(jù)庫系統(tǒng)原理教

5、程,清華大學(xué)出版社',1998 ,('12342378','數(shù)據(jù)庫',數(shù)據(jù)庫'清華大學(xué)出版社,1998 ,'王珊',27.9,3,0)INSERT INTO book VALUES('12341278','數(shù)據(jù)庫',數(shù)據(jù)庫'清華大學(xué)出版社,1998 ,'王珊',27.9,3,0)INSERT INTO book VALUES('14345678','數(shù)據(jù)庫',數(shù)據(jù)庫'清華大學(xué)出版社,1998 ,'王珊',27.9,3,0

6、)'王珊book VALUES上面SQL語句執(zhí)行的結(jié)果是在db27數(shù)據(jù)庫中創(chuàng)建了一個(gè)名為book的表,里面有 9列,INSERT INTO('12345678' ',27.9 , 3, 0) INSERT INTO隨后添加了 4個(gè)測試數(shù)據(jù),現(xiàn)在將該數(shù)據(jù)源添加到 ODBC數(shù)據(jù)源管理器中,打開路徑“控制面板所有控制面板項(xiàng) 管理工具”下的數(shù)據(jù)源(ODBC),添加新的數(shù)據(jù)源,選擇SQL Server ”名稱設(shè)置為db27,服務(wù)器在10.214.6.98,使用user277用戶登錄,完成后點(diǎn)擊測試數(shù)據(jù)源看能不能連上,顯示測試成功后,在用戶數(shù)據(jù)源中會(huì)看到剛剛添加的DSN:我

7、們編寫一個(gè)簡單的圖形化界面,打開VS2010,新建項(xiàng)目,選擇“ MFC應(yīng)用程序”,建立一個(gè)名為“ DataBaseODBC的項(xiàng)目,彈出的向?qū)е懈膽?yīng)用程序類型為“基于對話框”,大家在實(shí)際編程中可以需要選擇,這里只是為了做個(gè)示例,其他保持默認(rèn)。點(diǎn)擊工具箱中“ListControl”空間,拖到面板中,完成之后應(yīng)該是下圖這個(gè)樣子:工第-?治啟匚Text屣 Picture Control3E Hprizo-ntalBar§ Vertical Scroll Bar Slider Control? Spirt ControlEE Progress Control 噸 Hot Key3 List

8、Controlfl* Tree Control 賈 Tab Cortrol 日 Animation Contrail 空 Rich EditControl座 Date Timr& Picker 晝 Month Calendar Cc-,- IP Address Control 土:ExtiE-nde-d Combo BCControlSy&Link ControlDataB a s-eODBCrc.DIALOG - Dialog"調(diào)整控件的view屬性為Report,如下圖所示,控件的樣式會(huì)有相應(yīng)的改變。21 CfitaBnscODBCxIDC.USTl CList

9、Control) IUstE> -Static Edge FakeTransparent False冥u之一:圏標(biāo)(】tonL小圖標(biāo)CQrriall Imnl 閒I需fl箱害廣R色邑呂色紅色色右擊ListControl,添加變量,在對話框中輸入名稱,女口m_ListCtrl湊加成夷變量庖導(dǎo)-Data BaseODBC歡迎使用澹加廉員變里向異訪問0);pUMiC"0控件變里©變里類型迪:控件功:類別:CListCtrlviBcjisriControl蠻里宅:控件類型QP:最夫字符數(shù):SysListVi訊32最屮值QP:最夫值:»文件電):揃入心量戲龜卜匱 卜f

10、注釋觀)(/不零要表示法):n將這個(gè)ListControl設(shè)置成9列,并設(shè)置一些格式:CRect rc;m_ListCtrl.GetWi ndowRect(&rc);/ 獲取控件大小設(shè)置了 9列,大小是一樣的m ListCtrl.l nsertColum n( 0, T("書號 “),LVCFMT CENTER, rc.Size().cx/9, 0);m_ListCtrl.l nsertColum n( 1, _T(m_ListCtrl.I nsertColum n( 2, _T(m_ListCtrl.I nsertColum n( 3, _T(m_ListCtrl.l ns

11、ertColum n(4, _T(m_ListCtrl.I nsertColum n( 5, _T(m_ListCtrl.I nsertColum n(6, _T(m_ListCtrl.I nsertColum n(7, _T( m_ListCtrl.I nsertColum n(8, _T("類別"),LVCFMT_CENTER, rc.Size().cx/9, 1);"書名"),LVCFMT_CENTER, rc.Size().cx/9, 2);"岀版社"),LVCFMT_CENTER, rc.Size().cx/9, 3);&q

12、uot;岀版年份"),LVCFMT_CENTER, rc.Size().cx/9, 4);"作者"),LVCFMT_CENTER, rc.Size().cx/9, 5);"價(jià)格"),LVCFMT_CENTER, rc.Size().cx/9, 6);"總藏書量"),LVCFMT_CENTER, rc.Size().cx/9, 7);"目前庫存數(shù)"),LVCFMT_CENTER, rc.Size().cx/9, 8);LVS_EX_GRIDLINES是希望顯示網(wǎng)格; LVS_EX_FULLROWSELECT

13、是希望被選中時(shí)整行反色顯示; LVS_EX_HEADERDRAGDROP 是讓其支持點(diǎn)擊表頭排序;/LVS EX TWOCLICKACTIVATE 是希望有鼠標(biāo)在未被選中的行上移動(dòng)的時(shí)候有一些效果m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP |LVS EX TWOCLICKACTIVATE);把這些代碼放在 BOOL CDataBaseODBCDIg:OnlnitDialog(函數(shù)的return前

14、,運(yùn)行就有相應(yīng)的效果。在頭文件 DataBaseODBCDlg.h 中添加 #include "afxdb.h" , "afxdb.h"即 MFC的 ODBC類包括以下要用到的類:CDatabase類:主要功能是建立與數(shù)據(jù)源的連接。CRecordsel類:該類代表從數(shù)據(jù)源選擇的一組記錄(記錄集),程序可以選擇數(shù)據(jù)源中的某個(gè)表作為一個(gè)記錄集,也可以通過對表的查詢得到記錄集,還可以合并同一數(shù)據(jù)源中多個(gè)表的列到一個(gè)記錄集中.通過該類可對記錄集中的記錄進(jìn)行滾動(dòng)、修改、增加和刪除等操作。CDBException類:代表ODBC類產(chǎn)生的異常。概括地講,CDataba

15、se針對某個(gè)數(shù)據(jù)庫,它負(fù)責(zé)連接數(shù)據(jù)源;CRecordset#對數(shù)據(jù)源中的記錄集,它負(fù)責(zé)對記錄的操作。在頭文件中添加一些定義,其中CDBVariant對象表示用于MFC ODBC類的可變數(shù)據(jù)類型。private:CDatabase m_db;public :/將CDBVariant轉(zhuǎn)化成字符串CStri ng Varia ntToCStr in g(CDBVaria nt* var);為了方便,我就不添加新的按鈕,雙擊對話框的“確定”按鈕,進(jìn)入函數(shù),注釋掉里面 的OnOK函數(shù),添加如下代碼:連接數(shù)據(jù)庫,打開數(shù)據(jù)源,這里的 DSN就是之前在ODBC中設(shè)置的DSNif(!m_db.lsOpe n()

16、 && !m_db.Ope nEx(_T( "DSN=db27;UID=user277;PWD=user277" ), CDatabase:ope nReadO nly | CDatabase: no OdbcDialog)MessageBox(L "連接錯(cuò)誤!");return;/CRecordset類:代表從數(shù)據(jù)源選擇一組記錄(記錄集)CRecordset m_set (&m_db);/Open方法打開記錄集m_set.Open(CRecordset:forwardOnly,_T("SELECT * from boo

17、k"),CRecordset:readO nly);CDBVariant var; /記錄有數(shù)據(jù)的類型和數(shù)據(jù)的值,它封閉了VARIANT數(shù)據(jù)類型m_ListCtrl.DeleteAllltems();刪除所有的項(xiàng)目short nF ields = m_set.GetODBCFieldCou nt();得到列的數(shù)目int i = 0;添加所有內(nèi)容到控件while (!m_set.lsEOF()for(short in dex = 0; in dex < nF ields; in dex+)m_set.GetFieldValue(index, var);/ do somethi n

18、g with varValue/添加一行記錄if(i ndex = 0)m_ListCtrl.Insertltem(i, VariantToCString(&var);繼續(xù)增加記錄的其他項(xiàng)elsem_ListCtrl.SetItemText(i, index, VariantToCString(&var);m_set.MoveNext();i+;m_set.Close(); /凡打開m_db.Close(); /皆關(guān)閉VariantToCSting函數(shù)將 CDBVariantX寸象轉(zhuǎn)成 CString,用以顯示。CStri ng CDataBaseODBCDlg:Varia n

19、tToCStri ng(CDBVaria nt* var)CString str; /轉(zhuǎn)換以后的字符串if(!var)str = "NULL Var Parameter"return str;switch (var->m_dwType)case DBVT_SHORT:str.Format(L "%d" ,(int )var->mVal);break;case DBVT_LONG:str.Format(L "%d" ,var->mVal);break;case DBVT_SINGLE:str.Format(L &quo

20、t;%10.6f (double )var->m_fltVal);break;case DBVT_DOUBLE:str.Format(L "%10.6f" ,var->m_dblVal);break;case DBVT_BOOL:str = (var->m_boolVal=0) ?L "FALSE" : L"TRUE"break;case DBVT_STRING:str = var->m_pstri ng->GetBuffer();break;case DBVT_ASTRING:str = var->

21、;m_pstri ngA->GetBuffer();break;case DBVT_WSTRING:str = var->m_pstri ngW->GetBuffer();break;case DBVT_DATE:str.Format(L "%d-%d-%d" ,(var->m_pdate)->year,(var->m_pdate)->month,(var->m_pdate)->day );break;default:str.Format(L "Unk type %dn" ,var->m_dwT

22、ype); TRACE(L "Unknown type %dn" ,var->m_dwType);return str;根據(jù)CDBVarian俚的m_dwType屬性可以知道里面的內(nèi)容是什么類型的,然后對應(yīng)的顯示就OK了,其中DBVT_DAT漏性可以根據(jù)需要自己更改格式。至此,運(yùn)行程序,點(diǎn)擊“確定”按鈕就能看到圖示結(jié)果,可以完成查詢工作了。書號類別 書名 出版社出版 作者 介格 總藏 目前12341. .1232.12345. .14345. .清華 猜華 猗華 請華199&199& 1如B 1W827.9027.9027.9027.900000確走取

23、消不妨再添加一個(gè)"butt on ”控件用以添加記錄,從工具集中拖一個(gè)button控件,雙擊標(biāo)記代碼:void CDataBaseODBCDIg:O nBn ClickedBt nadd()/ TODO:在此添加控件通知處理程序代碼if(!m_db.lsOpe n() && !m_db.Ope nEx(_T("DSN=db27;UID=user277;PWD=user277" ),CDatabase:ope nRead Only | CDatabase: no OdbcDialog)MessageBox(L "連接錯(cuò)誤!");r

24、eturn ;trym_db.ExecuteSQL(_T("INSERT INTO book VALUES")_T("('87654321','其他','其他 1','浙江大學(xué)岀版社',1984,'韓寒',12.9,4,2)");catch (CDBException* pe)/ The error code is in pe->m_ nRetCodepe->ReportError();pe->Delete();m db.Close();運(yùn)行后,點(diǎn)擊新添加的

25、按鈕可以增加一條記錄。站 Data BaseODBC書號類別 書名 出版社 出版亠 作音 瞬 總磁 目前123斗12342. .12345. .14345. 87654+.B數(shù)數(shù)數(shù)其埶敎數(shù)數(shù)S 8 B B 4a 9印9 g 一I 1- -w-H 1|珊冊冊冊寒 王王王王韓27.903027.903027.903027.90 3012.90 42增加 髓 1 耽肖:再添加一個(gè)可以實(shí)現(xiàn)刪除的button,雙擊之后添加代碼如下。POSITION pos = m_ListCtrl.GetFirstSelectedltemPositio n();if (pos = NULL)TRACE(_T( "No items were selected!n");elsewhile (pos)得到選中的itemint nItem = m_ListCtrl.GetNextSelectedltem(pos)

溫馨提示

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

最新文檔

評論

0/150

提交評論