通過ODBC連接數據庫_第1頁
通過ODBC連接數據庫_第2頁
通過ODBC連接數據庫_第3頁
通過ODBC連接數據庫_第4頁
通過ODBC連接數據庫_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

2、過"windows身份驗證"登陸本地數據庫,無法通過"SQLserver身份驗證"登陸,這是由于安裝的時候是通過" windows身份驗證"安裝的,改一下配置即可:1.使用"windows身份驗證”登陸數據庫,點擊"登錄名” ,右擊sa,選擇屬性,點擊狀M帛規服籍器角色用戶映射狀態設置是否允許連接到教據庫引擎°授予O拒絕如登錄:O啟用C禁用僵)態,確保設置如左側圖所示。2. 右擊本地服務器名選擇屬性,更改安全性中的服務器身份驗證如下圖所示P匚(SqLSorvwJlW.2531 -曰段務- KOUSOUKE

3、N-PC觀存理搖據耕限 聯常向妁富連數高M &_r_rM.M 一+M一4 - E 一扇一備接(0卜名否'M腳本以幫助服矣器身份戴證身份險證模式0(0鼻SQL Server和Windows身份驗證模式僵)3.右擊地服務器名選擇重新啟動(這一部很重要)4. 如何還有問題的話查看目錄 "D:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLLog ” 下的 ERRORLOG 文件,找到錯誤代碼, google 之打開SQL server 2008連接一個我們測試用的數據庫,使用的 10.214.6.98上的數據

4、庫db27,用戶名和密碼都是 user277,執行以下命令:use db27CREATE Tablebook (bnochar ( 8),categorychar (10),titlevarchar (40) not null,pressvarchar ( 30) not null,byearint CHECK( byear > 0 )authorvarchar (20) not null,pricedecimal (7, 2) CHECK( price > 0 ),totalintCHECK( total>=0 ),stockintCHECK( stock>=0 ),

5、CONSTRAINT ckCHECK( stock<=total)INSERT INTO bookVALUES('12345678','數據庫','數據庫系統原理教程','清華大學出版社',1998,王珊',27.9 , 3, 0)INSERT INTO book VALUES('12342378','數據庫','數據庫','清華大學出版社',1998 ,'王珊',27.9,3, 0)INSERT INTO bookVALUES('

6、;12341278','數據庫','數據庫','清華大學出版社',1998 ,'王珊',27.9,3, 0)INSERT INTO bookVALUES('14345678','數據庫','數據庫','清華大學出版社',1998 ,'王珊',27.9,3, 0)上面SQL語句執行的結果是在 db27數據庫中創建了一個名為book的表,里面有9列,隨后添加了 4個測試數據,現在將該數據源添加到ODBC數據源管理器中,打開路徑“控制面板所有控制面板

7、項 管理工具”下的數據源(ODB。,添加新的數據源,選擇 SQLServer”名稱設置為db27,服務器在10.214.6.98,使用user277用戶登錄,完成后點擊測試數據源看能不能連上,顯示測試成功后,在用戶數據源中會看到剛剛添加的DSN:我們編寫一個簡單的圖形化界面,打開VS2010,新建項目,選擇“ MFC應用程序”,建立一個名為“ DataBaseODBC的項目,彈出的向導中更改應用程序類型為“基于對話框”,大家在實際編程中可以需要選擇,這里只是為了做個示例,其他保持默認。點擊工具箱中“ListControl”空間,拖到面板中,完成之后應該是下圖這個樣子:-?些 Static Te

8、xt暖 Picture Control 函 Hprizo-ntalBar§ Vertical Scroll BarSlider Control 手 Spin Control EE Progress Control < Hot Key日 List Controlhj Tree Control 童 Tab Corrtrol 日 Animation Contrail 絲 Rich Edit Control 座 Date Timr& Picker 國 Month Calendar Cc-,- IP Address Control 蘭至 ExtiE-nde-d Combo B.

9、唱ControlSy&Link ControlDataB a seODBC.rc.DIALOG -調整控件的view屬性為Report,如下圖所示,控件的樣式會有相應的改變。21 CfitaBnscODBC* P xIDC.USTl CList Control) ILktE,Static Edge FakeTransparent False£邑色邑紅邑色曲11點洋專宙敗«奧h之一;®(lcon).小圖標如 m_ListCtrlfrcrii 5il需I擇帶fR右擊ListControl,添加變量,在對話框中輸入名稱, 添加成苣.變量向導-Data BaseO

10、DBC歡迎使用添加成員袤里向導訪間);public 71控件寰里(0:)孌里類型(Y):控件H)如):類別:CListCtrlviBcjisnControl變里名® :控件類型堡):最大字符數區):|h_Li§ tC1SysListVi 32最'值QP:最大值®):5坷傳入n福面7頃注粹®(/不需要表示法):將這個ListControl設置成9列,并設置一些格式:CRect rc;m_ListCtrl.GetWindowRect(&rc);/ 獲取控件大小/設置了 9列,大小是一樣的m_ListCtrl.InsertColumn(0, _

11、T("書號"),LVCFMT_CENTER, rc.Size().cx/9, 0);m_ListCtrl.InsertColumn(1, _T(m_ListCtrl.InsertColumn(2, _T(m_ListCtrl.InsertColumn(3, _T(m_ListCtrl.InsertColumn(4, _T(m_ListCtrl.InsertColumn(5, _T(m_ListCtrl.InsertColumn(6, _T(m_ListCtrl.InsertColumn(7, _T(m_ListCtrl.InsertColumn(8, _T("類別

12、"),LVCFMT_CENTER, rc.Size().cx/9, 1);"書名"),LVCFMT_CENTER, rc.Size().cx/9, 2);"出版社"),LVCFMT_CENTER, rc.Size().cx/9, 3);"出版年份"),LVCFMT_CENTER, rc.Size().cx/9, 4);"作者"),LVCFMT_CENTER, rc.Size().cx/9, 5);"價格"),LVCFMT_CENTER, rc.Size().cx/9, 6);"

13、;總藏書量"),LVCFMT_CENTER, rc.Size().cx/9, 7);"目前庫存數"),LVCFMT_CENTER, rc.Size().cx/9, 8);/LVS_EX_GRIDLINES是希望顯示網格;/LVS_EX_FULLROWSELECT是希望被選中時整行反色顯示;/LVS_EX_HEADERDRAGDROP 是讓其支持點擊表頭排序;/LVS_EX_TWOCLICKACTIVATE 是希望有鼠標在未被選中的行上移動的時候有一些效果m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle(

14、) | LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP |LVS_EX_TWOCLICKACTIVATE);把這些代碼放在 BOOL CDataBaseODBCDlg:OnInitDialog(爐數的return前,運行就有相應的效果。在頭文件 DataBaseODBCDlg.h 中添加 #include "afxdb.h" , "afxdb.h"即 MFC的ODBC!包括以下要用到的類:CDatabas缺:主要功能是建立與數據源的連接。CRecordse換:該類代表從數據源選

15、擇的一組記錄(記錄集),程序可以選擇數據源中的某個表作為一個記錄集,也可以通過對表的查詢得到記錄集,還可以合并同一數據源中多個表的列到一個記錄集中.通過該類可對記錄集中的記錄進行滾動、修改、增加和刪除等操作。CDBExceptio成:代表ODBC!產生的異常。概括地講,CDatabase#對某個數據庫,它負責連接數據源;CRecordset#對數據源中的記錄集,它負責對記錄的操作。在頭文件中添加一些定義,其中CDBVarian附象表示用于MFC ODBC!的可變數據類型。private:CDatabase m_db; public :/將CDBVariant轉化成字符串CString Vari

16、antToCString(CDBVariant* var);為了方便,我就不添加新的按鈕,雙擊對話框的“確定”按鈕,進入函數,注釋掉里面 的OnOK函數,添加如下代碼:/連接數據庫,打開數據源,這里的 DSN就是之前在ODBC中設置的DSNif(!m_db.IsOpen() && !m_db.OpenEx(_T( "DSN=db27;UID=user277;PWD=user277" ), CDatabase:openReadOnly | CDatabase:noOdbcDialog)(MessageBox(L "連接錯誤!"); retu

17、rn;)/CRecordset類:代表從數據源選擇一組記錄(記錄集)CRecordset m_set(&m_db);/Open方法打開記錄集m_set.Open(CRecordset:forwardOnly,_T( "SELECT * from book"),CRecordset:readOnly);CDBVariant var; /記錄有數據的類型和數據的值,它封閉了 VARIANT數據類型m_ListCtrl.DeleteAllItems();刪除所有的項目short nFields = m_set.GetODBCFieldCount(); / 得到列的數目in

18、t i = 0;/添加所有內容到控件while (!m_set.IsEOF()(for(short index = 0; index < nFields; index+)(m_set.GetFieldValue(index, var);/ do something with varValue/W加一行記錄if(index = 0)m_ListCtrl.InsertItem(i, VariantToCString(&var);繼續增加記錄的其他項elsem_ListCtrl.SetItemText(i, index, VariantToCString(&var);)m_se

19、t.MoveNext();i+;)m_set.Close(); /凡打開m_db.Close(); 皆關閉VariantToCSting函數將 CDBVariantX寸象轉成 CString,用以顯示。CString CDataBaseODBCDlg:VariantToCString(CDBVariant* var)(CString str; /轉換以后的字符串if(!var)(str = "NULL Var Parameter"return str;)switch (var->m_dwType)(case DBVT_SHORT:str.Format(L ”%d” ,

20、(int)var->m_iVal);break;case DBVT_LONG:str.Format(L "%d" ,var->m_lVal);break;case DBVT_SINGLE:str.Format(L "%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 &quo

21、t;FALSE" : L"TRUE"break;case DBVT_STRING:str = var->m_pstring->GetBuffer();break;case DBVT_ASTRING:str = var->m_pstringA->GetBuffer();break;case DBVT_WSTRING:str = var->m_pstringW->GetBuffer();break;case DBVT_DATE:str.Format(L "%d-%d-%d" ,(var->m_pdate)-

22、>year,(var->m_pdate)->month,(var->m_pdate)->day );break;default:str.Format(L "Unk type %dn" ,var->m_dwType);TRACE(L "Unknown type %dn" ,var->m_dwType);return str;根據CDBVarian浬的m_dwType屬性可以知道里面的內容是什么類型的,然后對應的顯示就OK了,其中DBVT_DAT房性可以根據需要自己更改格式。至此,運行程序,點擊“確定”按鈕就能看到圖

23、示結果,可以完成查詢工作了。必 DataBa&eODBC書號 類別 書名 出版社 出版 作者 倚格 總顯 目前12341.123421234514345據據據據B數教數& & B s99豹乾風I I"I王王王afl珊珊27.903027.903027.903027.9030確定取消不妨再添加一個"button ”控件用以添加記錄,從工具集中拖一個button控件,雙擊標記代碼:void CDataBaseODBCDlg:OnBnClickedBtnadd()(/ TODO:在此添加控件通知處理程序代碼if(!m_db.IsOpen() &&a

24、mp; !m_db.OpenEx(_T( "DSN=db27;UID=user277;PWD=user277" ), CDatabase:openReadOnly | CDatabase:noOdbcDialog)(MessageBox(L "連接錯誤!"); return ;try(m_db.ExecuteSQL(_T("INSERT INTO book VALUES")_T("('87654321','其他','其他 1','浙江大學出版社',1984,&#

25、39;韓寒',12.9,4,2)");catch (CDBException* pe)(/ The error code is in pe->m_nRetCodepe->ReportError();pe->Delete();m_db.Close();運行后,點擊新添加的按鈕可以增加一條記錄。呂 Data BaseODBC書號 類引 書名 出版社 出版 作者 價格 總藏 目前1234L.12342. .12345. . 14345 87654報掀梅搗他數數數數其數數瑚夠991991一I934fflflaHe王王王27.903027.903027.903027.90 3012.90 42招加 碇 1 肖 '再添加一個可以實現刪除的 button ,雙擊之后添加代碼如下。POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();if (pos = NULL)TRACE(_T( "No items were selected!n");elsewhile (pos)得到選中的itemint nItem = m_Lis

溫馨提示

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

評論

0/150

提交評論