實(shí)驗(yàn)七:通過ODBC方式訪問數(shù)據(jù)庫_第1頁
實(shí)驗(yàn)七:通過ODBC方式訪問數(shù)據(jù)庫_第2頁
實(shí)驗(yàn)七:通過ODBC方式訪問數(shù)據(jù)庫_第3頁
實(shí)驗(yàn)七:通過ODBC方式訪問數(shù)據(jù)庫_第4頁
實(shí)驗(yàn)七:通過ODBC方式訪問數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

題目:實(shí)驗(yàn)七通過ODBC訪問數(shù)據(jù)庫姓名Vivian日期2006-1-1實(shí)驗(yàn)內(nèi)容:一.配置數(shù)據(jù)源配置數(shù)據(jù)源共有兩種方法:方法一:運(yùn)用數(shù)據(jù)源管理工具來進(jìn)行配置。方法二:使用DriverManager提供的ConfigDsn函數(shù)來增加、修改或刪除數(shù)據(jù)源。這種方法特別適用于在應(yīng)用程序中創(chuàng)建的臨時使用的數(shù)據(jù)源。在本實(shí)驗(yàn)中,我們采用第一種方法創(chuàng)建數(shù)據(jù)源。實(shí)驗(yàn)中需要同時用到KingbaseES和SQLServer,因此需要分別建立兩個數(shù)據(jù)源,我們將其取名為KingbaseESODBC和SQLServer0下面是建立這兩個數(shù)據(jù)源的具體步驟。選擇『開始』I『設(shè)置』I『控制面板』菜單,在彈出窗口中雙擊“管理工具”圖標(biāo)進(jìn)入管理工具界面,雙擊“數(shù)據(jù)源(ODBC)”圖標(biāo)。1.建立KingbaseES數(shù)據(jù)源。(1)選擇“系統(tǒng)DSN”選項(xiàng),單擊【添加(D)…】按鈕,系統(tǒng)彈出“創(chuàng)建新數(shù)據(jù)源”對話框,如圖1所示:圖1數(shù)據(jù)源管理器(2)如圖2所示,在ODBC驅(qū)動器程序列表中,選擇“KingbaseODBCDriver”,單擊【完成】按鈕,系統(tǒng)彈出“KingbaseODBC數(shù)據(jù)源配置”對話框,如圖3所示。

圖2創(chuàng)建新數(shù)據(jù)源(3)輸入數(shù)據(jù)源名稱、數(shù)據(jù)庫名稱以及數(shù)據(jù)庫IP地址。圖中數(shù)據(jù)源的名稱為KingbaseESODBC,連接的數(shù)據(jù)庫為“學(xué)生課程數(shù)據(jù)庫”,服務(wù)器為localhost,用戶名和口令分別為SYSTEM和MANAGER。注意:KingbaseES區(qū)別大小寫。圖3KingbaseODBC數(shù)據(jù)源配置(4)單擊【保存】按鈕,這樣就創(chuàng)建了一個名為“KingbaseESODBC”的KingbaseESODBC數(shù)據(jù)源。(5)如果要測試和數(shù)據(jù)源的連接是否成功,可以單擊“測試連接”,系統(tǒng)會根據(jù)測試的結(jié)果反饋相應(yīng)的消息框,如圖4和圖5所示。

圖4連接成功圖5連接失敗以上五步就建立了一個名為KingbaseESODBC的數(shù)據(jù)源。2.建立SQLServer數(shù)據(jù)源。(1)選擇“系統(tǒng)DSN”選項(xiàng),單擊【添加(D)…】按鈕,系統(tǒng)彈出“創(chuàng)建新數(shù)據(jù)源”對話框,如圖6所示:圖6數(shù)據(jù)源管理器(2)如圖7所示,在ODBC驅(qū)動器程序列表中,選擇“SQLServer”,單擊【完成】按鈕,系統(tǒng)彈出“CCreateNewDataSourcetoSQLServer”對話框,如圖8所示。

圖7創(chuàng)建數(shù)據(jù)源配置(3)如圖8,輸入數(shù)據(jù)源名稱和服務(wù)器,單擊【下一步】按鈕。圖中數(shù)據(jù)源的名稱為SQLServer,服務(wù)器為(local)。如圖9,選擇身份認(rèn)證方式,輸入用戶名和密碼,用戶名和口令分別為sa和sa(請根據(jù)實(shí)際情況進(jìn)行修改,并對源代碼進(jìn)行相應(yīng)的修改)。圖8SQLServer數(shù)據(jù)源配置(1)

圖9SQLServer數(shù)據(jù)源配置(2)(4)連續(xù)單擊【下一步】按鈕,這樣就創(chuàng)建了一個名為“SQLServer”的SQLServerODBC數(shù)據(jù)源。如圖10所示,將彈出一個提示框,提示即將創(chuàng)建一個新的ODBC數(shù)據(jù)源。圖10提示框(5)如果要測試和數(shù)據(jù)源的連接是否成功,可以單擊“TestDataSource”,如果連接成功,系統(tǒng)將會顯示一個連接成功的消息框,如圖11所示。圖11連接成功以上五步就建立了一個名為SQLServer的數(shù)據(jù)源。注:在創(chuàng)建數(shù)據(jù)源,測試連接是否成功時,如果KingbaseES和SQLServer未啟動服務(wù),則將顯示連接失敗。啟動服務(wù)后,再進(jìn)行測試,連接成功。二.通過ODBC訪問異構(gòu)數(shù)據(jù)庫,并且對異構(gòu)數(shù)據(jù)庫進(jìn)行操作。實(shí)驗(yàn)環(huán)境介紹。實(shí)驗(yàn)七是在之前完成的實(shí)驗(yàn)一基礎(chǔ)上進(jìn)行的。系統(tǒng)配置為:CPU:P3800內(nèi)存:512MB硬盤:30G軟件系統(tǒng):WINDOWS2000SERVERFAMILY在實(shí)驗(yàn)一中,我們已經(jīng)成功安裝了KingbaseESV4.1,自動建立的“學(xué)生課程數(shù)據(jù)庫”中含有基本表Student,其中安裝路徑為C:\ProgramFiles目錄下。我們還需要在SQLServer中預(yù)先建立基本表STUDENTo在本實(shí)驗(yàn)中,我們將編寫程序連接兩個不同RDBMS的數(shù)據(jù)源,將KingbaseES數(shù)據(jù)庫中的STUDENT表中的數(shù)據(jù)備份到SQLServer數(shù)據(jù)庫的STUDENT中。在VC++6.0環(huán)境中編程實(shí)現(xiàn)訪問數(shù)據(jù)庫。實(shí)驗(yàn)預(yù)備。本實(shí)驗(yàn)源程序名為ODBCTest。下面我們將在VC++6.0環(huán)境下對該程序進(jìn)行編譯。實(shí)驗(yàn)源代碼。以下為本實(shí)驗(yàn)實(shí)際程序的源碼,并給出了一些注釋,供參考。#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<sqltypes.h>#defineSNO_LEN30#defineNAME_LEN50#defineDEPART_LEN100#defineSSEX_LEN5intmain(){/*Step1定義句柄和變量*/〃以king開頭的表示的是連接KINGBASEES的變量〃以server開頭的表示的是連接SQLSERVER的變量SQLHENVkinghenv,serverhenv;〃環(huán)境句柄SQLHDBCkinghdbc,serverhdbc;//連接句柄SQLHSTMTkinghstmt,serverhstmt;〃語句句柄SQLRETURNret;〃結(jié)果返回集SQLCHARsName[NAME_LEN],sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN];SQLINTEGERsAge;SQLINTEGERcbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,cbName=SQL_NTS,cbDepart=SQL_NTS;/*Step2初始化環(huán)境*/〃分配環(huán)境句柄ret=SQLAllocHandle(SQL_HANDLE_ENVSQL_NULL_HANDLE,&kinghenv);ret=SQLAllocHandle(SQL_HANDLE_ENVSQL_NULL_HANDLE,&serverhenv);〃設(shè)置管理環(huán)境的屬性ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);/*Step3:建立連接*///分配連接句柄ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc);ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ret=SQLConnect(kinghdbc,//連接KingbaseES"KingbaseESODBC”,SQL_NTS,"SYSTEM”,SQL_NTS,"MANAGER",SQL_NTS);if(!SQL_SUCCEEDED(ret))〃連接失敗時返回錯誤值return-1;ret=SQLConnect(serverhdbc,〃連接SQLServer"SQLServer”,SQL_NTS,"sa”,SQL_NTS,"sa”,SQL_NTS);if(!SQL_SUCCEEDED(ret))〃連接失敗時返回錯誤值return-1;/*Step4:初始化語句句柄*/ret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt);ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);〃設(shè)置語句選項(xiàng)ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);/*Step5:兩種方式執(zhí)行語句*//*預(yù)編譯帶有參數(shù)的語句*/〃需要多次執(zhí)行插入,因此預(yù)先聲明插入語句ret=SQLPrepare(serverhstmt,"INSERTINTOSTUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)VALUES(?,?,?,?,?)",SQL_NTS);if(ret==SQL_SUCCESSIIret==SQL_SUCCESS_WITH_INFO){〃綁定參數(shù)retSQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SNO_LEN,0,sSno,0,&cbSno);retSQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,sName,0,&cbName);retSQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2,0,sSex,0,&cbSex);retSQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONGSQL_INTEGER,0,0,&sAge,0,&cbAge);retSQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);}/*執(zhí)行SQL語句*/ret=SQLExecDirect(kinghstmt,"SELECT*FROMSTUDENT",SQL_NTS);if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO){〃將結(jié)果集中的屬性列一一綁定至變量ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&cbSno);ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&cbName);ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&cbSex);ret=SQLBindCol(kinghstmt,4,SQL_C_LONG&sAge,0,&cbAge);ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&cbDepart);}/*Step6:處理結(jié)果集并執(zhí)行預(yù)編譯后的語句*/while((ret=SQLFetch(kinghstmt))!=SQL_NO_DATA_FOUND){if(ret==SQL_ERROR)〃錯誤處理printf("Fetcherror\n");elseret=SQLExecute(serverhstmt);//執(zhí)行語句}/*Step7中止處理*/SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt);〃釋放Kingbase語句句柄SQLDisconnect(kinghdbc);〃斷開與KingbaseES的連接SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);〃釋放Kingbase連接句柄SQLFreeHandle(SQL_HANDLE_ENVkinghenv);〃釋放Kingbase環(huán)境句柄SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);〃釋放SQLServer語句句柄SQLDisconnect(serverhdbc);〃斷開與SQLServer的連接SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);〃釋放SQLServer連接句柄SQLFreeHandle(SQL_HANDLE_ENVserverhenv);〃釋放SQLServer環(huán)境句柄return0;}在編寫程序的時候,請注意ODBC1.0和ODBC2.x、ODBC3.x函數(shù)使用上的差異,彳

溫馨提示

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

評論

0/150

提交評論