




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)?zāi)康模豪斫釵DBC的相關(guān)概念:ODBC、句柄等;理解ODBC的工作原理;掌握ODBC的工作流程;掌握通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)的方法二、實(shí)驗(yàn)環(huán)境:SQLServer、VC三、實(shí)驗(yàn)學(xué)時(shí):二學(xué)時(shí)四、實(shí)驗(yàn)內(nèi)容和步驟:〔一〕配置數(shù)據(jù)源配置數(shù)據(jù)源共有兩種方法:方法一:運(yùn)用數(shù)據(jù)源管理工具來(lái)進(jìn)行配置。方法二:使用DriverManager提供的ConfigDsn函數(shù)來(lái)增加、修改或刪除數(shù)據(jù)源。這種方法特別適用于在應(yīng)用程序中創(chuàng)立的臨時(shí)使用的數(shù)據(jù)源。在本實(shí)驗(yàn)中,我們采用第一種方法創(chuàng)立數(shù)據(jù)源。我們將其取名為SQLServer。下面是建立這數(shù)據(jù)源的具體步驟。選擇『開(kāi)始』│『設(shè)置』│『控制面板』菜單,在彈出窗口中雙擊“管理工具〞圖標(biāo)進(jìn)入管理工具界面,雙擊“數(shù)據(jù)源〔ODBC〕〞圖標(biāo)。建立SQLServer數(shù)據(jù)源。選擇“系統(tǒng)DSN〞選項(xiàng),單擊【添加(D)…】按鈕,系統(tǒng)彈出“創(chuàng)立新數(shù)據(jù)源〞對(duì)話框,如下列圖所示:圖1數(shù)據(jù)源管理器如圖2所示,在ODBC驅(qū)動(dòng)器程序列表中,選擇“SQLServer〞,單擊【完成】按鈕,系統(tǒng)彈出“CreateNewDataSourcetoSQLServer〞對(duì)話框,如圖圖2創(chuàng)立數(shù)據(jù)源配置如圖3,輸入數(shù)據(jù)源名稱(chēng)和效勞器,單擊【下一步】按鈕。圖中數(shù)據(jù)源的名稱(chēng)為SQLServer,效勞器為(local)。如圖4,選擇身份認(rèn)證方式,輸入用戶名和密碼,用戶名和口令分別為sa和sa〔請(qǐng)根據(jù)實(shí)際情況進(jìn)行修改,并對(duì)源代碼進(jìn)行相應(yīng)的修圖3SQLServer數(shù)據(jù)源配置〔1〕圖4SQLServer數(shù)據(jù)源配置〔2〕連續(xù)單擊【下一步】按鈕,這樣就創(chuàng)立了一個(gè)名為“SQLServer〞的SQLServerODBC數(shù)據(jù)源。如圖5所示,將彈出一個(gè)提示框,提示即將創(chuàng)立一個(gè)新的ODBC數(shù)據(jù)源。圖5提示框如果要測(cè)試和數(shù)據(jù)源的連接是否成功,可以單擊“TestDataSource〞,如果連接成功,系統(tǒng)將會(huì)顯示一個(gè)連接成功的消息框,如圖6所示。圖6連接成功以上五步就建立了一個(gè)名為SQLServer的數(shù)據(jù)源。注:在創(chuàng)立數(shù)據(jù)源,測(cè)試連接是否成功時(shí),如果KingbaseES和SQLServer未啟動(dòng)效勞,那么將顯示連接失敗。啟動(dòng)效勞后,再進(jìn)行測(cè)試,連接成功。〔二〕通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù),并且對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。1.實(shí)驗(yàn)環(huán)境介紹。在本實(shí)驗(yàn)中,我們將編寫(xiě)程序連接到RDBMS的數(shù)據(jù)源,將數(shù)據(jù)錄入到SQLServer數(shù)據(jù)庫(kù)的STUDENT中。2.在VC++6.0環(huán)境中編程實(shí)現(xiàn)訪問(wèn)數(shù)據(jù)庫(kù)。實(shí)驗(yàn)預(yù)備。本實(shí)驗(yàn)源程序名為odbc,代碼在《數(shù)據(jù)庫(kù)系統(tǒng)概論》書(shū)中已經(jīng)給出。下面我們將在VC++6.0環(huán)境下對(duì)該程序進(jìn)行編譯。實(shí)驗(yàn)步驟。首先,在VC++6.0中新建一個(gè)Win32ConsoleApplication的工程,并將工程命名為ODBC03。然后,將已經(jīng)寫(xiě)好的ODBC.c文件參加到該工程的SourceFiles中,編譯并且執(zhí)行。實(shí)驗(yàn)源代碼。以下為本實(shí)驗(yàn)實(shí)際程序的源碼,并給出了一些注釋?zhuān)﹨⒖肌?include<stdio.h>#include<iostream.h>#include<string.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<odbcss.h>#defineMAXBUFLEN255 #defineMaxNameLen20//下面這句是預(yù)處理語(yǔ)句,使程序在編譯時(shí)分別編譯綁定段或SQLGetdata段#defineSQLBINDCOLSQLHENVhenv=SQL_NULL_HENV;//定義環(huán)境句柄SQLHDBChdbc1=SQL_NULL_HDBC;//定義數(shù)據(jù)庫(kù)連接句柄SQLHSTMThstmt1=SQL_NULL_HSTMT;//定義語(yǔ)句句柄intmain(){ RETCODEretcode;//錯(cuò)誤返回碼//AllocatetheODBCEnvironmentandsavehandle. retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); if(retcode<0)//錯(cuò)誤處理 { cout<<"allocateODBCEnvironmenthandleerrors."<<endl; return-1; } //NotifyODBCthatthisisanODBC3.0application. retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); if(retcode<0)//錯(cuò)誤處理 { cout<<"theODBCisnotversion3.0"<<endl; return-1; } //AllocateanODBCconnectionandconnect. retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1); if(retcode<0)//錯(cuò)誤處理 { cout<<"allocateODBCconnectionhandleerrors."<<endl; return-1; } //DataSourceNamemustbeoftypeUserDNSorSystemDNS char*szDSN="sql_37"; char*szUID="sa";//logname char*szAuthStr="1234321";//passward //connecttotheDataSource retcode=SQLConnect(hdbc1,(SQLCHAR*)szDSN,(SWORD)strlen(szDSN),(SQLCHAR*)szUID,(SWORD)strlen(szUID),(SQLCHAR*)szAuthStr,(SWORD)strlen(szAuthStr)); if(retcode<0)//錯(cuò)誤處理 { cout<<"connecttoODBCdatasourceerrors."<<endl; return-1; } //Allocateastatementhandle. retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1); if(retcode<0)//錯(cuò)誤處理 { cout<<"allocateODBCstatementhandleerrors."<<endl; return-1; } //ExecuteanSQLstatementdirectlyonthestatementhandle.每一句后面都跟了一個(gè)錯(cuò)誤處理,當(dāng)發(fā)生錯(cuò)誤時(shí)可以很方便的判斷錯(cuò)在哪里 retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"createtables(snochar(5)primarykey,snamechar(10)notnull,ssexchar(2),sageint,sdeptchar(10))",SQL_NTS); if(retcode<0) { cout<<"createrrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95001','郝紅','女',20,'計(jì)科')",SQL_NTS); if(retcode<0) { cout<<"s1inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95002','秦沛','男',21,'計(jì)科')",SQL_NTS); if(retcode<0) { cout<<"s2inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95003','劉蓉','女',22,'網(wǎng)絡(luò)')",SQL_NTS); if(retcode<0) { cout<<"s3inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95004','張超','男',20,'網(wǎng)絡(luò)')",SQL_NTS); if(retcode<0) { cout<<"s4inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95005','王珂','男',20,'軟件')",SQL_NTS); if(retcode<0) { cout<<"s5inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"insertintosvalues('95006','方案','男',21,'軟件')",SQL_NTS); if(retcode<0) { cout<<"s6inserterrors."<<endl; return-1; } retcode=SQLExecDirect(hstmt1,(SQLCHAR*)"SElECTsname,sdeptFROMs",SQL_NTS); if(retcode<0) { cout<<"ExecutingstatementthroughtODBCerrors."<<endl; return-1; } //SQLBindColvariables SQLCHARsdept[MaxNameLen+1]; SQLCHAR sname[MaxNameLen+1]; SQLINTEGERcolumnLen=0;//數(shù)據(jù)庫(kù)定義中該屬性列的長(zhǎng)度#ifdefSQLBINDCOL//游標(biāo)已被封裝在其中,一開(kāi)始把兩個(gè)列號(hào)分別寫(xiě)為s中的列號(hào)2〔sname〕,5〔sdept〕,第二個(gè)參數(shù)應(yīng)為游標(biāo)中的列號(hào),而不是表中的列號(hào), retcode=SQLBindCol(hstmt1,1,SQL_C_CHAR,sname,MaxNameLen,&columnLen); retcode=SQLBindCol(hstmt1,2,SQL_C_CHAR,sdept,MaxNameLen,&columnLen); while((retcode=SQLFetch(hstmt1))!=SQL_NO_DATA) { if(columnLen>0) printf("sname=%ssdept=%s\n",sname,sdept); else printf("sname=%ssdept=NULL\n",sname,sdept); }#else while(1) { retcode=SQLFetch(hstmt1); if(retcode==SQL_NO_DATA) break; retcode=SQLGetData(hstmt1,1,SQL_C_CHAR,sname,MaxNameLen,&columnLen); retcode=SQLGetData(hstmt1,2,SQL_C_CHAR,sdept,MaxNameLen,&columnLen); if(columnLen>0) printf("sname=%ssdept=%s\n",sname,sdept); else printf("sname=%ssdept=NULL\n",sna
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人才隊(duì)伍課題申報(bào)書(shū)
- 產(chǎn)地供應(yīng)合同范本
- 上海學(xué)生項(xiàng)目課題申報(bào)書(shū)
- 合伙購(gòu)車(chē)運(yùn)營(yíng)合同范本
- 北京正規(guī)賣(mài)房合同范本
- 公園綠化合同范本
- 醫(yī)藥廠家銷(xiāo)售合同范例
- 化妝品加盟店合同范本
- 農(nóng)村購(gòu)山地合同范本
- 合同維修合同范本
- 中國(guó)中材海外科技發(fā)展有限公司招聘筆試沖刺題2025
- 兩層鋼結(jié)構(gòu)廠房施工方案
- 班級(jí)凝聚力主題班會(huì)12
- 初中語(yǔ)文“經(jīng)典誦讀與海量閱讀”校本課程實(shí)施方案
- Gly-Gly-Leu-生命科學(xué)試劑-MCE
- 翻斗車(chē)司機(jī)安全培訓(xùn)
- 零售業(yè)的門(mén)店形象提升及店面管理方案設(shè)計(jì)
- 高速公路40m連續(xù)T梁預(yù)制、架設(shè)施工技術(shù)方案
- 《論教育》主要篇目課件
- 外籍工作人員聘用合同范本
- 大學(xué)生就業(yè)指導(dǎo)教學(xué)-大學(xué)生就業(yè)形勢(shì)與政策
評(píng)論
0/150
提交評(píng)論