論文格式
電氣工程 會計論文 金融論文 國際貿易 財務管理 人力資源 輕化工程 德語論文 工程管理 文化產業管理 信息計算科學 電氣自動化 歷史論文
機械設計 電子通信 英語論文 物流論文 電子商務 法律論文 工商管理 旅游管理 市場營銷 電視制片管理 材料科學工程 漢語言文學 免費獲取
制藥工程 生物工程 包裝工程 模具設計 測控專業 工業工程 教育管理 行政管理 應用物理 電子信息工程 服裝設計工程 教育技術學 論文降重
通信工程 電子機電 印刷工程 土木工程 交通工程 食品科學 藝術設計 新聞專業 信息管理 給水排水工程 化學工程工藝 推廣賺積分 付款方式
  • 首頁 |
  • 畢業論文 |
  • 論文格式 |
  • 個人簡歷 |
  • 工作總結 |
  • 入黨申請書 |
  • 求職信 |
  • 入團申請書 |
  • 工作計劃 |
  • 免費論文 |
  • 現成論文 |
  • 論文同學網 |
搜索 高級搜索

當前位置:論文格式網 -> 免費論文 -> 計算機畢業論文

關于學習Visual C++中的開放數據庫連接技術的體會(二)

本論文在計算機畢業論文欄目,由論文格式網整理,轉載請注明來源www.donglienglish.cn,更多論文,請點論文格式范文查看
ODBC API是一組標準的ODBC函數庫,除了一般的數據庫操作函數外,還包括一組函數(如SQLExec或SQLExecdirect)能夠內嵌標準SQL查詢語句。SQL(Structured Query Language結構化查詢語言)是一種存取關系型數據庫的標準語言,能夠定義、查詢、修改和控制數據,簡單的語句能夠作用于整個數據表格,具有很強的功能。
同Windows 3.1 SDK中API類似,ODBC API也是基于句柄(handle)進行操作的。API函數按功能可分為以下幾類:
·數據源連接函數,設置/獲取有關信息的函數;
·準備/提交執行SQL查詢語句的函數和獲得數據的函數;
·終止函數和異常處理函數。
上述函數的順序也表示了進行數據庫操作的一般順序。兩個問題需要特別說明,一是數據類型問題:數據源中的數據所具有的數據類型稱為SQL數據類型,這些數據類型在其數據源中可能比較特殊,不一定和ODBC SQL數據類型存儲方式一致,驅動程序把這些數據類型同ODBC SQL數據類型進行相互轉換,每一個ODBC SQL數據類型都相當于一個ODBC C語言數據類型;二是函數的調用級別問題,并不是每一個ODBC驅動程序都支持所有的ODBC API函數調用,在應用程序中,可以調用有關函數獲取驅動程序以支持層次方面的信息。
四、ODBC應用編程
在Visual C++中,MFC (Microsoft Foundation Class基本類庫)是經過對Windows應用程序中各個部件進行類的抽象而建立的一組預定義的類,如窗口基類(CWnd)、各種窗口派生類等等,這些類在應用程序中可直接使用,不需要重新定義。在MFC中,也為ODBC預定義了幾個類,其中主要的是數據庫類(CDatabase)和記錄集合類(CRecoredset)。這兩個類既有聯系又有區別,在應用程序中,可以分別使用,也可以同時使用,每一類也可以同時存在多個對象。CDatabase的每一個對象代表了一個數據源的連接,CRecordset的每一個對象代表了從一
個數據表中按預定的查詢條件獲得的記錄的集合,一般說來,前者適宜于對數據源下的某個數據表格進行整體操作,后者用于對所選的記錄集合進行處理。
同Windows類與SDK API 函數的關系一樣,CDatabase類與ODBC API函數也有類似的關系,但CDatabase類中并不包含所有的ODBC API函數,大部分操作功能仍須直接調用ODBC API函數,如目錄功能函數,用于獲得數據源下的數據表格信息,如表格名,字段名等。
在應用編程時,一般使用CDatabase和CRecordset的派生類。假設派生類分別為CUserdb和CUserset,而在應用類CUserClass中,使用了一個CUserdb對象(m-db)和一個Cuserset對象(m-recset)。
1.m-db連接數據源
m-db在完成定義構造后,要調用CDatabase的打開(Open)函數以進行數據源的實際連接:
m-db.Open(lpszDSN, bExclusive, bReadOnly, lpszConnect);
打開函數需要輸入四個參數。lpszDSN:要連接的數據源的名字,如果lpszDSN=NULL且lpszConnect中也沒有指明數據源名,則該調用會自動出現一個對話框列出所有可用的數據源(名),讓用戶選擇。bExclusive:只支持“假”(False)值,表示為共享(share)方式連接。因此,應用程序在運行前,一定要裝入share.exe或在Windows的system.ini中裝入vshare.386。 ReadOnly:指明數據源操作方式是“只讀”還是可以修改。lpszConnect: 指明連接字符串,包括數據源名、用戶標識碼、口令等信息。該字符串必須以“ODBC;”開頭,表示該連接是與一個ODBC數據源的連接(考慮以后版本支持非ODBC數據源)。
m-db打開后,其指針可以傳給m-recset作為其數據源。m-db關閉后,將關閉所有CRecordset對它的連接,m-db也可以重新打開。
2.m-db操作數據
數據源打開后,即可對數據庫文件中的數據表格進行操作,操作以調用SQL語句方式進行,可直接通過ODBC API函數,或者CDatabase類成員函數ExecuteSQL。數據表名在SQL語句中指定,如下語句則在所在的數據源中的clerk表中插入一個記錄,記錄的name字段值為"chen"。
m-db.ExecuteSQL("insert into clerk(name) value(‘chen‘)");
3.m-recset連接數據
m-recset在構造時,可傳入一個CDatabase對象指針,作為m-recset的數據源,當為NULL時,必須重載CRecordset的函數GetDefaultConnect,以提供數據源連接字符串(相當于m-db.Open中的lpszConnect)。如下則表示連接名為COMPANY的數據源(當傳入了合法的CDatabase對象指針時,該函數將不被調用)。
CString CUserset::GetDefaultConnect()
{
return"ODBC;DSN=COMPANY;";
}
4.m-recset選取記錄和字段
m-recset在調用打開函數時,即獲得了符合條件的一組記錄,條件語句在Open函數中的lpszSQL中給出,如果lpszSQL為NULL,則必須重載CRecordset的函數以提供該語句。該語句是一個SELECT語句,帶或不帶where和order by子句(如果不帶,where和Order by的條件也可在CRecordset的兩個預定義成員變量m-strFilter和m-strSort中給出)。lpszSQL也可以只是一個數據表名(table-name),也可以是對內嵌在數據庫文件中的查詢程序的調用語句。所選擇的一系列字段名,在成員函數DoFieldExchange中由一系列RFX-函數指定。RFX-(Record Field Exchange)函數,使字段和成員變量一一建立類型對應關系。另外,m-strFilter中也可以帶變量參數(用"?"表示,如"fieldl=? AND field2=?"),參數與成員變量的對應關系也在DoFieldExchange中由RFX-函數指定(串中的"?"將被參數變量值逐一替換)。
void CUserset::DoFieldExchange(CFieldExchange* pFX)
{
pFX-SetFieldType(CFieldExchange::outputColumn);
/*以下為字段連接 */
RFX-?(pFX,"field1",m-var1);
RFX-?(pFX,"field2",m-var2);
...
RFX-?(pFX,"fieldn",m-varn);
pFX-SetFieldType(CFieldExchange::param);
/*以下為參數連接*/
RFX-?(pFX,field1,m-param1);
RFX-?(pFX,field2,m-param2);
...
}
其中,?為ODBC SQL數據類型名,如RFX-Double,RFX-Text等。

綜合上述,選取記錄和字段實際是由下列語句完成:
SELECT rfx-field-list FROM table-name[WHERE m-strFilter][ORDER BY m-strSort]
字段變量和參數變量的個數一定要在調用打開函數前(如構造函數中)準確地賦值給成員變量m-nFields和m-nParams。m-recset在打開后的任何時候調用Requery()函數,將根據新的查詢條件(例如修改了參數變量值)重新選取記錄。
5.m-recset操作數據
記錄集合生成后,其當前記錄的各字段值被保存在前述的各字段變量中,如果調用CRecordset的滾動(scroll)函數,如MoveFirst(),MoveNext(),MovePrev(),MoveLast()等,字段變量的值將自動跟隨“當前”記錄的位置的變化而變化。IsBOF(),IsEOF()用于判別是否移動到記錄的頭或尾。
數據操作主要包括刪除(Delete),添加(AddNew)和更改(Edit),一般流程為:
if(m-recset.CanUpdate()) /*是否允許修改*/
{
if (m-db.CanTransact()) /*是否支持“批”處理*/
{
m-db.BeginTrans();
m-recset.AddNew();
/* 修改字段變量值 */
. . .
m-recset.Update();
m-db.CommitTrans();
if(catch error)
m-db.RollBack();
}
}
對于AddNew和Edit,修改字段變量后一定要調用函數Update(),否則更新將丟失,而Delete操作則不必進行字段值修改和調用Update()。
上述的CDatabase的四個函數是ODBC為保證數據操作的可靠性而提供的“批”處理函數,即在BeginTrans和CommitTrans之間的數據修改如果出現任何異常,可通過函數RoolBack來恢復所做的修改。
在多用戶系統使用時,每一個數據源可以被多個用戶的多個任務連接,不同的任務可同時修改相同的數據源。ODBC提供了兩種數據表更新的同步機制(在m-recset.Open函數中指定),“靜態”的(snapshot)和動態的(dynaset)。前者是一組靜態的記錄集合,當建立后不會改變,除了反應自己的添加/刪除外,不反應別的用戶的修改,除非調用了Requery重新建立。后者是一組動態的記錄集合,自己或別的用戶所作的修改隨時反應到集合中來(當然也可用Requery重建),以保持記錄與數據源的同步。在應用中,應根據需要確定使用哪一種方式。

五、結束語
從以上討論可以看出,ODBC應用接口十分簡便!再加上Visual C++中的AppWizard和ClassWizard自動生成框架代碼功能,連接一個數據源,生成一個CRecordset對象,就更快捷了。
應用程序只需關心數據的處理而不必費心數據的存取,另外,另一個與ODBC有關的類CRecordView,是一個窗口類CWnd的派生類,建立在CRecordset上,可直接構造數據庫記錄顯示窗口,某些情況下也不妨一用。

首頁 上一頁 1 2 下一頁 尾頁 2/2/2


上一篇:關于學習大學語文的心得體會 下一篇:關于計算機專業的學習心得
Tags:關于 學習 Visual 開放 數據庫 連接 技術 體會 【收藏】 【返回頂部】
人力資源論文
金融論文
會計論文
財務論文
法律論文
物流論文
工商管理論文
其他論文
保險學免費論文
財政學免費論文
工程管理免費論文
經濟學免費論文
市場營銷免費論文
投資學免費論文
信息管理免費論文
行政管理免費論文
財務會計論文格式
數學教育論文格式
數學與應用數學論文
物流論文格式范文
財務管理論文格式
營銷論文格式范文
人力資源論文格式
電子商務畢業論文
法律專業畢業論文
工商管理畢業論文
漢語言文學論文
計算機畢業論文
教育管理畢業論文
現代教育技術論文
小學教育畢業論文
心理學畢業論文
學前教育畢業論文
中文系文學論文
計算機論文

本站部分文章來自網絡,如發現侵犯了您的權益,請聯系指出,本站及時確認刪除 E-mail:349991040@qq.com

論文格式網(www.donglienglish.cn--論文格式網拼音首字母組合)提供計算機畢業論文畢業論文格式,論文格式范文,畢業論文范文

Copyright@ 2010-2018 LWGSW.com 論文格式網 版權所有

感谢您访问我们的网站,您可能还对以下资源感兴趣:

论文格式网:毕业论文格式范文