




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)四 醫(yī)學(xué)數(shù)據(jù)庫(kù)讀寫(xiě)模塊的實(shí)現(xiàn)山東大學(xué)生物醫(yī)學(xué)工程教研室2021/9/301目的和原理 PACS系統(tǒng)、HIS系統(tǒng)等都使用數(shù)據(jù)庫(kù)技術(shù)來(lái)完成信息有效存取的操作,SQL Server作為一種高效的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)經(jīng)常被使用。本實(shí)驗(yàn)通過(guò)編寫(xiě)SQL語(yǔ)句,利用ADO實(shí)現(xiàn)讀寫(xiě)操作,練習(xí)醫(yī)學(xué)數(shù)據(jù)庫(kù)讀寫(xiě)模塊的實(shí)現(xiàn)方法。 關(guān)鍵詞:PACS, ADO, SQL語(yǔ)句, VC+, 數(shù)據(jù)庫(kù)技術(shù)2021/9/302VC+數(shù)據(jù)庫(kù)編程準(zhǔn)備知識(shí)1. ADO簡(jiǎn)介2. SQL語(yǔ)言介紹3. SQL Server數(shù)據(jù)庫(kù)介紹2021/9/3031. ADO簡(jiǎn)介 ADO(ActiveX Data Object)是基于OLE DB(微軟提供的
2、通向不同數(shù)據(jù)源的低級(jí)應(yīng)用程序接口)的訪(fǎng)問(wèn)接口,它對(duì)OLE DB的接口作了封裝,它定義了ADO對(duì)象,屬于數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的高層接口。ADO提供了訪(fǎng)問(wèn)各種數(shù)據(jù)庫(kù)的統(tǒng)一手段,它可以處理任何類(lèi)型的數(shù)據(jù)。它功能強(qiáng)大,易于使用、速度快、內(nèi)存支出少,并且支持ClientServer模式。2021/9/304ADO訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的過(guò)程如下:第一步: 用#import指令引入動(dòng)態(tài)鏈接庫(kù),并從其中取出對(duì)象和信息;第二步: 使用智能指針_ConnectionPtr創(chuàng)建數(shù)據(jù)庫(kù)的連接;第三步: 利用建立好的連接,通過(guò)Connection、Command對(duì)象執(zhí)行SQL命令,或利用Recordset對(duì)象取得結(jié)果記錄進(jìn)行查詢(xún)、處理;第
3、四步:關(guān)閉和數(shù)據(jù)庫(kù)的連接;2021/9/3052. SQL語(yǔ)言介紹SQL是英文(Structured Query Language)的縮寫(xiě),意思為結(jié)構(gòu)化查詢(xún)語(yǔ)言。SQL語(yǔ)言結(jié)構(gòu)簡(jiǎn)潔,功能強(qiáng)大,簡(jiǎn)單易學(xué),所以自從IBM公司1981年推出以來(lái),SQL語(yǔ)言得到了廣泛的應(yīng)用。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),如Oracle, Microsoft SQL Server, Access等都采用了SQL語(yǔ)言標(biāo)準(zhǔn)。 SQL語(yǔ)言的優(yōu)點(diǎn): 1.非過(guò)程化語(yǔ)言 2.統(tǒng)一的語(yǔ)言 3.是所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言2021/9/306SQL語(yǔ)言分類(lèi): 數(shù)據(jù)查詢(xún)語(yǔ)言DQL-Data Query Language:SEL
4、ECT 數(shù)據(jù)操縱語(yǔ)言DML-Data Manipulation Language: INSERT, UPDATE, DELETE 數(shù)據(jù)定義語(yǔ)言DDL-Data Definition Language: CREATE, ALTER, DROP 數(shù)據(jù)控制語(yǔ)言DCL-Data Control Language: COMMIT WORK, ROLLBACK WORK本實(shí)驗(yàn)主要使用Select,Insert,Delete和Update實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢(xún)、插入、刪除和修改操作。2021/9/3073. SQL Server數(shù)據(jù)庫(kù)(1)SQL Server 2000 是Microsoft 公司推出的數(shù)據(jù)庫(kù)管
5、理系統(tǒng)。具有使用方便、可伸縮性好、與相關(guān)軟件集成程度高等優(yōu)點(diǎn)??煽缭綇亩喾N平臺(tái)使用。SQL Server是一個(gè)功能完備的數(shù)據(jù)庫(kù)管理系統(tǒng)。它包括支持標(biāo)準(zhǔn)的SQL語(yǔ)言、并具有可擴(kuò)展的特性。而其具備的存儲(chǔ)過(guò)程、觸發(fā)器等特性,也是大型數(shù)據(jù)庫(kù)才擁有的。2021/9/308接下來(lái)向大家介紹一下建立數(shù)據(jù)庫(kù)及在數(shù)據(jù)庫(kù)中建表的過(guò)程:Step1:?jiǎn)?dòng)SQL Server企業(yè)管理器,在SQLServer組處單擊右鍵,選擇“新建SQLServer注冊(cè)”,在出現(xiàn)的對(duì)話(huà)框中如下將服務(wù)器設(shè)為本機(jī),也可根據(jù)所用服務(wù)器填寫(xiě)服務(wù)器ID。2021/9/309打開(kāi)SQL Server企業(yè)管理器返回2021/9/3010設(shè)置服務(wù)器20
6、21/9/3011Step2:?jiǎn)螕舴?wù)器旁的加號(hào)(+),其中便包含了已有的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)文件夾上單擊鼠標(biāo)右鍵,選擇“新建數(shù)據(jù)庫(kù)”菜單選項(xiàng)。系統(tǒng)會(huì)顯示數(shù)據(jù)庫(kù)屬性對(duì)話(huà)框。Step3:選擇常規(guī)標(biāo)簽(如圖,該標(biāo)簽在初始時(shí)已默認(rèn)被選中),在名稱(chēng)文本輸入一個(gè)數(shù)據(jù)庫(kù)名,我們這里輸入的是dialog(即是創(chuàng)建后的數(shù)據(jù)庫(kù)名)。其余的用默認(rèn)值即可。2021/9/3012在服務(wù)器中建數(shù)據(jù)庫(kù)返回2021/9/3013新建dialog數(shù)據(jù)庫(kù)返回2021/9/3014Step4:?jiǎn)螕魯?shù)據(jù)庫(kù)旁的加號(hào)(+),其中便包含了已有的表。在表文件夾上單擊鼠標(biāo)右鍵,選擇“新建表”菜單選項(xiàng)。在出現(xiàn)的新窗口中設(shè)置新表的各項(xiàng),關(guān)閉時(shí)保存該
7、表并將其命名為dialog。Step5:打開(kāi)該表并填寫(xiě)表的內(nèi)容,至此,對(duì)數(shù)據(jù)庫(kù)及其中的表的建立完成。2021/9/3015在dialog數(shù)據(jù)庫(kù)中新建表返回2021/9/3016設(shè)置表的屬性返回2021/9/3017打開(kāi)dialog表返回2021/9/3018填寫(xiě)dialog表(over)返回2021/9/3019Step1:裝ADO補(bǔ)丁包mdac_typ.exe。Step2:使用VC+新建對(duì)話(huà)框工程,并在工程中通過(guò)project-add to project-files添加ado.h和ado.cpp,通過(guò)這其中的五個(gè)類(lèi)來(lái)間接使用ADO。Step3:在header files中找到文件stdaf
8、x.h中#endif / _AFX_NO_AFXCMN_SUPPORT下面添加語(yǔ)句#import “C:Program FilesCommon FilesSystemadoMSADO15.DLL” no_namespace rename(“EOF”, “AdoEOF”),目的是引入ado的動(dòng)態(tài)鏈接庫(kù)(打開(kāi)ADO補(bǔ)丁包mdac_typ.exe后就在計(jì)算機(jī)上安裝了此動(dòng)態(tài)鏈接庫(kù))。2021/9/30202021/9/3021Step4:在對(duì)話(huà)框類(lèi)頭文件中,引入頭文件 ado.h(#include ado.h)。Step5:在對(duì)話(huà)框類(lèi)中加入CADODatabase的成員變量m_conn(成員變量一般加
9、m_)。2021/9/30222021/9/3023Step6:用對(duì)話(huà)框編輯工具條中的Static Text、Edit Box、Group Box和Button按鈕編輯對(duì)話(huà)框的界面。Step7:編寫(xiě)由“查詢(xún)”按鈕生成的響應(yīng)函數(shù)OnSearch。初始化連接串,連接數(shù)據(jù)庫(kù),并進(jìn)行查詢(xún)操作。Step8:編寫(xiě)由“插入”按鈕生成的響應(yīng)函數(shù)OnInsert,初始化連接串,連接數(shù)據(jù)庫(kù),并進(jìn)行插入操作。Step9:編寫(xiě)由“刪除”按鈕生成的響應(yīng)函數(shù)OnDelete,初始化連接串,連接數(shù)據(jù)庫(kù),并進(jìn)行刪除操作。Step10:編寫(xiě)由“修改”按鈕生成的響應(yīng)函數(shù)OnUpdate,初始化連接串,連接數(shù)據(jù)庫(kù),并進(jìn)行修改操作。
10、2021/9/3024Step6 用對(duì)話(huà)框編輯工具條中的Static Text、Edit Box、Group Box和Button按鈕編輯對(duì)話(huà)框的界面返回返回致謝2021/9/3025程序流程圖(1) 驗(yàn)證信息初始化連接PACS數(shù)據(jù)庫(kù)是否成功?設(shè)定SQL檢索條件檢索是否成功記錄是否結(jié)束添加查詢(xún)值到顯示列表顯示查詢(xún)結(jié)果關(guān)閉數(shù)據(jù)庫(kù)程序結(jié)束顯示連接失敗顯示檢索失敗移到下一條記錄是否是否是否是驗(yàn)證信息初始化連接PACS數(shù)據(jù)庫(kù)是否成功?設(shè)定SQL插入條件插入操作返回值是否為真?顯示“插入成功”關(guān)閉數(shù)據(jù)庫(kù)程序結(jié)束顯示連接失敗顯示“插入失敗”是執(zhí)行插入操作否否查詢(xún)插入2021/9/3026程序流程圖(2)
11、是驗(yàn)證信息初始化連接PACS數(shù)據(jù)庫(kù)是否成功?設(shè)定SQL更新條件插入操作返回值是否為真?顯示“修改成功”關(guān)閉數(shù)據(jù)庫(kù)程序結(jié)束顯示連接失敗顯示“修改失敗”是執(zhí)行更新操作否是驗(yàn)證信息初始化連接PACS數(shù)據(jù)庫(kù)是否成功?設(shè)定SQL刪除條件插入操作返回值是否為真?顯示“刪除成功”關(guān)閉數(shù)據(jù)庫(kù)程序結(jié)束顯示連接失敗顯示“刪除失敗”是執(zhí)行刪除操作否刪除修改2021/9/3027程序代碼OnSearch()的源程序OnInsert ()的源程序OnDelete ()的源程序OnUpdate ()的源程序2021/9/3028void CWhlDlg:OnSearch() UpdateData(true);CStrin
12、g strConnectionStr;CString password=;CString userid=sa;/CString dbname=LwPacs;strConnectionStr.Format(Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initail CataLog=lwpacs;Data Source=127.0.0.1,password,userid);if(!m_conn.Open(strConnectionStr)AfxMessageBox(無(wú)法訪(fǎng)問(wèn)PACS數(shù)據(jù)庫(kù),按“確定”退出
13、程序);exit(0);elseCADORecordset RecordSet(&(m_conn);/結(jié)果集變量,m_conn表示查詢(xún)前首先建立的連接OnSearch()的源程序2021/9/3029CString sql;sql.Format(select * from dialog.dbo.dialog where PatId=%s or PatNam=%s or PatSex=%s or PatAge=%s,m_pid,m_pnam,m_psex,m_page); if(!RecordSet.Open(sql, CADORecordset:openQuery)/open即開(kāi)始執(zhí)行查找Af
14、xMessageBox(數(shù)據(jù)庫(kù)檢索失敗!);elseCString strNameList=;while(!RecordSet.IsEOF()CString strName=;RecordSet.GetFieldValue(PatNam,strName);strNameList+=strName;strNameList+=,;RecordSet.MoveNext();AfxMessageBox(strNameList);m_conn.Close();2021/9/3030void CWhlDlg:OnInsert() UpdateData(true);/用文本框中的內(nèi)容更新成員變量,CStri
15、ng strConnectionStr;CString password=;CString userid=sa;/CString dbname=lwpacs;strConnectionStr.Format(Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initail CataLog=lwpacs;Data Source=127.0.0.1,password,userid);if(!m_conn.Open(strConnectionStr)AfxMessageBox(無(wú)法訪(fǎng)問(wèn)PACS數(shù)據(jù)庫(kù),按“確定”退
16、出程序);exit(0);else CString strSQL = insert into dialog.dbo.dialog(PatID,PatNam,PatSex,PatAge) values (;strSQL += +m_pid+,;strSQL += +m_pnam+,;strSQL += +m_psex+,;strSQL += +m_page+);if(m_conn.Execute(strSQL)/成功插入后返回1AfxMessageBox(插入成功!);else AfxMessageBox(插入失??!);m_conn.Close();2021/9/3031void CWhlDlg
17、:OnDelete() UpdateData(true);CString strConnectionStr;CString password=;CString userid=sa; strConnectionStr.Format(Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initail CataLog=lwpacs;Data Source=127.0.0.1,password,userid);if(!m_conn.Open(strConnectionStr)AfxMessageBox(無(wú)法訪(fǎng)問(wèn)PA
18、CS數(shù)據(jù)庫(kù),按“確定”退出程序);exit(0);elseCString sql;sql.Format(delete from dialog.dbo.dialog where PatId=%s or PatNam=%s or PatSex=%s or PatAge=%s,m_pid,m_pnam,m_psex,m_page); if(m_conn.Execute(sql)/成功刪除后返回1AfxMessageBox(刪除成功!);else AfxMessageBox(刪除失?。?;m_conn.Close();2021/9/3032void CWhlDlg:OnUpdate() UpdateD
19、ata(true);CString strConnectionStr;CString password=;CString userid=sa; strConnectionStr.Format(Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initail CataLog=lwpacs;Data Source=127.0.0.1,password,userid);if(!m_conn.Open(strConnectionStr)AfxMessageBox(無(wú)法訪(fǎng)問(wèn)PACS數(shù)據(jù)庫(kù),按“確定”退出程序);ex
20、it(0);elseCString sql;sql.Format(update dialog.dbo.dialog set PatNam=%s,PatSex=%s,PatAge=%s where PatId=%s,m_pnam,m_psex,m_page,m_pid); if(m_conn.Execute(sql)/成功修改后返回1AfxMessageBox(修改成功!);else AfxMessageBox(修改失?。?;m_conn.Close();2021/9/30336. 程序中用到的函數(shù)及參數(shù)含義* UpdateData(true),使edit控件中的內(nèi)容與其對(duì)應(yīng)變量值保持一致,實(shí)現(xiàn)
21、查詢(xún)內(nèi)容的是實(shí)時(shí)更新。*strConnectionStr.FormatProvider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initail CataLog=lwpacs;Data Source=127.0.0.1“,password,userid),初始化數(shù)據(jù)庫(kù)登陸信息* m_conn.Open(strConnectionStr)驗(yàn)證數(shù)據(jù)庫(kù)登陸信息與數(shù)據(jù)庫(kù)系統(tǒng)是否匹配,匹配的話(huà)打開(kāi)數(shù)據(jù)庫(kù)strConnectionStr為登陸信息字符串,由上一函數(shù)初始化。* RecordSet.Open(sql, CADORe
22、cordset:openQuery)驗(yàn)證是否連接到記錄,sql為SQL操作語(yǔ)句字符串,CADORecordset:openQuery為SQL查詢(xún)操作標(biāo)志字符,屬于enum 數(shù)據(jù)類(lèi)型。* AfxMessageBox()是系統(tǒng)自帶的提示框函數(shù),可用于程序調(diào)試* RecordSet.IsEOF()是檢驗(yàn)是否在結(jié)果集最后一條記錄之后* RecordSet.GetFieldValue(Csting const a,Cstring b)獲取一條記錄中的某個(gè)字段,將a屬性對(duì)應(yīng)的值賦給b* RecordSet.MoveNext()轉(zhuǎn)到下一條記錄。* CADODatabase.Close()關(guān)閉與數(shù)據(jù)庫(kù)的連接。* m_conn.Execute(strSQL)執(zhí)行指定的SQL語(yǔ)句2021/9/30347. 驗(yàn)證運(yùn)行情況Step1:經(jīng)過(guò)編譯、連接和運(yùn)行程序沒(méi)有錯(cuò)誤.如圖。Step2:驗(yàn)證OnSearch()程序,在查詢(xún)項(xiàng)中的編號(hào)輸入0001,單擊“查詢(xún)”按鈕。運(yùn)行結(jié)果如圖。Step3:打開(kāi)dialog數(shù)據(jù)庫(kù)中的dialog表,發(fā)現(xiàn)查詢(xún)的信息是正確的.Step4:驗(yàn)證OnInsert()程序,在插入項(xiàng)的各項(xiàng)中依次輸入0011
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路轉(zhuǎn)換協(xié)議書(shū)
- 租房合同水電費(fèi)協(xié)議書(shū)
- 資產(chǎn)頂賬協(xié)議書(shū)
- 砂場(chǎng)拆遷協(xié)議書(shū)
- 綠化肥料協(xié)議書(shū)
- 給女兒寫(xiě)協(xié)議書(shū)
- 挖掘機(jī)買(mǎi)賣(mài)合同協(xié)議書(shū)
- 自動(dòng)退休協(xié)議書(shū)
- 藥材開(kāi)挖協(xié)議書(shū)
- 酒店供銷(xiāo)協(xié)議書(shū)
- 國(guó)際學(xué)生評(píng)估項(xiàng)目PISA 2006學(xué)生問(wèn)卷
- (高清版)DZT 0130.9-2006 地質(zhì)礦產(chǎn)實(shí)驗(yàn)室測(cè)試質(zhì)量管理規(guī)范 第9部分:巖石礦物樣品鑒定
- (高清版)TDT 1038-2013 土地整治項(xiàng)目設(shè)計(jì)報(bào)告編制規(guī)程
- 危化品運(yùn)輸安全責(zé)任劃分與追究的標(biāo)準(zhǔn)與程序
- 護(hù)理質(zhì)控課件
- 空調(diào)維保服務(wù)方案(技術(shù)方案)
- TSM0501G 豐田試驗(yàn)測(cè)試標(biāo)準(zhǔn)
- 實(shí)驗(yàn)室安全準(zhǔn)入考試題庫(kù)答案
- 機(jī)械加工圖紙標(biāo)注法資料
- HDB3編解碼電路設(shè)計(jì)
- 體系文件編號(hào)規(guī)則
評(píng)論
0/150
提交評(píng)論