數(shù)據(jù)庫(kù)原理-實(shí)驗(yàn)7-通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)_第1頁(yè)
數(shù)據(jù)庫(kù)原理-實(shí)驗(yàn)7-通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)_第2頁(yè)
數(shù)據(jù)庫(kù)原理-實(shí)驗(yàn)7-通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)_第3頁(yè)
數(shù)據(jù)庫(kù)原理-實(shí)驗(yàn)7-通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)_第4頁(yè)
數(shù)據(jù)庫(kù)原理-實(shí)驗(yàn)7-通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、囊淼©的:1. 理解odbc的相關(guān)概念:odbc、句柄等;2. 理解odbc的工作原理;3. 掌握odbc的工作流程;4. 掌握通過(guò)odbc訪問(wèn)數(shù)據(jù)庫(kù)的方法二、實(shí)淼钚境:sql server 2008、vc+ 6.0三、囊游令時(shí):2學(xué)時(shí)(一)配置數(shù)據(jù)源配置數(shù)據(jù)源共有兩種方法:lo方法一:運(yùn)用數(shù)據(jù)源管理工具來(lái)進(jìn)行配s方法二:使用driver manager提供的configdsn函數(shù)來(lái)增加、修改或刪除數(shù)據(jù)源。這種方法特別適用于在應(yīng)用程序中創(chuàng)建的臨時(shí)使用的數(shù)據(jù)源,在本實(shí)驗(yàn)中,我們采用第一種方法創(chuàng)建數(shù)據(jù)源。我們將其取名為sqlserver。下面是建立這數(shù)據(jù)源的具體步7u;jwo選擇開(kāi)始

2、i設(shè)置i控制面板菜單,在彈出窗口中雙擊“管理工具"i標(biāo)進(jìn)入管理工具界面,雙擊“數(shù)據(jù)源(odbc r圖標(biāo)建立sqlserver數(shù)據(jù)源。(1 )選擇“系統(tǒng)dsn”選項(xiàng),單擊【添加(d).】按鈕,系統(tǒng)彈出“創(chuàng)建新?lián)础睂?duì)話框,如下圖所示:1數(shù)據(jù)源管理器(2)如固2所示,在odbc驅(qū)動(dòng)器程序列表中,選擇“sql server”,單擊【完成i 按鈕,系統(tǒng)彈出 “create new data source to sql server”對(duì)話框,如圖2所示:2創(chuàng)建數(shù)據(jù)源配置3)如圖3 ,輸入數(shù)據(jù)源名稱和服務(wù)器,單擊【下一步】按鈕。圖中數(shù)據(jù)源的名稱為sqlserver,服務(wù)器為(local)。如圖4

3、,選擇身份認(rèn)證方式,輸入用戶名和密碼,用戶名和口令分別為sa和sa (請(qǐng)根據(jù)實(shí)際情況進(jìn)行修改,并對(duì)源代碼進(jìn)行相應(yīng)的修t(n) >取消觸3 sqlserver數(shù)據(jù)源配置(1 )創(chuàng)建到sql server的新數(shù)據(jù)源sql server應(yīng)該如何裕ie登錄id的頁(yè)偽?o使用網(wǎng)洛登錄id的windows nt臉證(w).(;使用用戶瑤入曼錄id鍆宏碼的sql server驗(yàn)證(s).要更改用于與sql server愈r的網(wǎng)絡(luò)庫(kù),清單壬“客力聲頤0連接sql server以獲馮其它配直透項(xiàng)的默認(rèn)設(shè)罝(c).圖4 sqlserver數(shù)據(jù)源配置(2 )(4)連續(xù)單擊【下一步】按鈕,這樣就創(chuàng)建了一個(gè)名為“

4、sqlserver sqlserver odbc數(shù)據(jù)源。如圖5所示,將彈出一個(gè)提示框,提示即將創(chuàng)建一個(gè)新的odbc數(shù)據(jù)源。5提示框5)如果要測(cè)試和數(shù)據(jù)源的連接是否成功,可以單擊“test data source”,如果連接成功,系統(tǒng)將會(huì)顯示一個(gè)連接成功的消息框,如圖6所示。6連接成功以上五步就建立了一個(gè)名為sqlserver的數(shù)據(jù)源。注:在創(chuàng)建數(shù)據(jù)源,測(cè)試連接是否成功時(shí),如果kingbasees和sql server未啟動(dòng)服務(wù),則將顯示連接失敗。啟動(dòng)服務(wù)后,再進(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)中,我們將編寫程序連接到rdbms的數(shù)

5、據(jù)源,將數(shù)據(jù)錄入到sqlserver數(shù)據(jù)庫(kù)的student中。2. 在vc+6.0環(huán)境中編程實(shí)現(xiàn)訪問(wèn)數(shù)據(jù)庫(kù)。(1 )實(shí)驗(yàn)預(yù)備。本實(shí)驗(yàn)源程序名為odbc ,代碼在數(shù)據(jù)庫(kù)系統(tǒng)概論書中已經(jīng)給出。下我們將在vc+6.0環(huán)境下對(duì)該程序進(jìn)行編譯,(2) 實(shí)驗(yàn)步驟。首先,在vc+6.0中新建一個(gè)win32 console application的項(xiàng)目,并將項(xiàng)目命名為odbc03。然后,將已經(jīng)寫好的odbc.c文件加入到該項(xiàng)目的source files中,編譯并且執(zhí)行。(3) 實(shí)驗(yàn)源代碼。以下為本實(shí)驗(yàn)實(shí)際程序的源碼,并給出了一些注釋,供參考。#include <stdio.h>#include &

6、lt;iostream.h>#include <string.h>#include <windows.h>#include <sql.h>#include <sqlext.h>#include <odbcss.h>#define maxbuflen 255#define maxnamelen 20/下面這句是預(yù)處理語(yǔ)句,使程序在編譯時(shí)分別編譯綁定段或sqlgetdata段#define sqlbindcolsqlhenvsqlhdbcsqlhstmthenv = sql_null_henv;/定義環(huán)境句柄hdbcl = sql_

7、null_hdbc;/定義數(shù)據(jù)庫(kù)連接句柄hstmtl = sql_null_hstmt;/定義語(yǔ)句句柄int main()retcode retcode;/錯(cuò)誤返回碼/ allocate the odbc environment and save handle.retcode = sqlaiiochandle (sql_handle_env, null, &henv);if(retcode < 0 )/錯(cuò)誤處理cout«hallocate odbc environment handle errors.h«endl;return -1:/ notify odbc

8、 that this is an odbc 3.0 application.retcode = sqlsetenvattr(henv, sql_attr_odbc_version,(sqlpointer) sql_ov_odbc3, sqljsjnteger);if(retcode < 0 ) /錯(cuò)誤處理cout«"the odbc is not version3.0 "<<endl;return -1;/ allocate an odbc connection and connect.retcode = sqlaiiochandle(sql_h

9、andle_dbc, henv, &hdbc1);if(retcode < 0 ) /錯(cuò)誤處理cout«nallocate odbc connection handle errors."«endl;return -1;/data source name must be of type user dns or system dnschar* szdsn = "sql_37"char* szuid = "sa"/log namechar* szauthstr = h1234321 n;/passward/conne

10、ct to the data source retcode=sqlconnect(hdbc1,(sqlchar*)szdsn,(sword)strlen(szdsn),(sqlchar*)szuid, (sword)strlen(szuid),(sqlchar*)szauthstr,(sword)strlen(szauthstr);if(retcode < 0 ) /錯(cuò)誤處理cout«hconnect to odbc datasource errors.*'«endl;return -1;/ allocate a statement handle.retcod

11、e = sqlaiiochandle(sql_handle_stmt, hdbcl, &hstmt1);if(retcode < 0 ) /錯(cuò)誤處理cout«hallocate odbc statement handle errors."«endl;return -1;ii execute an sql statement directly on the statement handle.每一句后面都跟了一個(gè)錯(cuò)誤處理,當(dāng)發(fā)生錯(cuò)誤時(shí)可以很方便的判斷錯(cuò)在哪里retcode = sqlexecdirect(hstmt1,(sqlchar*)"cr

12、eate table s(sno char(5) primary key,sname char(10) not null,ssex char(2),sage int, sdeptchar(10)",sql一nts);if(retcode<0)cout«"creat errors."«endl;return -1;retcode = sqlexecdirect(hstmt1,(sqlchar*)"insert into s valuesf9500r/郝紅,女jo,1計(jì)科廣,sql_nts);if(retcode<0)cout

13、«"s1 insert errors.h«endl;return -1;retcode = sqlexecdirect(hstmt1,(sqlchar*)hinsert into s valuesc95002?秦沛男,21, 計(jì)科sqljsits);if(retcode<0)cout«"s2 insert errors.,«endl;return retcodesqlexecdirect(hstmt1,(sqlchar*)"insertinto svaluesf95003?劉蓉/女 |,22, 網(wǎng)絡(luò) *)",

14、sql_nts> if(retcode<0)cout«"s3 insert errors.t,«endl;return -1:retcodesqlexecdirect(hstmt1,(sqlchar*)"insertinto svaluesf95004?張超?男 jo,網(wǎng)絡(luò)*)",sql_nts> if(retcode<0)cout«"s4 insert errors.”<<endl;returninto sretcode = sqlexecdirect(hstmt1,(sqlchar*)

15、"insert valuesf950057 王珂/男 jo,軟件 y,sql_nts);if(retcode<0)cout«"s5 insert errors."«endl;return -retcode = sqlexecdirect(hstmt1,(sqlchar*)"insert into svaluesc95006?計(jì)劃/男',21,軟件 y,sql_nts>if(retcode<0)cout«"s6 insert errors.,'«endl;return -1

16、;retcode = sqlexecdirect(hstmt1,(sqlchar*)"seiect sname,sdeptfrom s", sql_nts);if(retcode < 0)cout«hexecuting statement throught odbc errors.m«endl;return -1;/ sqlbindcol variablessqlchar snamemaxnamelen + 1;sqlinteger columnlen = 0;/數(shù)據(jù)庫(kù)定義中該屬性列的長(zhǎng)度#ifdef sqlbindcol/游標(biāo)已被封裝在其中,一開(kāi)

17、始把兩個(gè)列號(hào)分別寫為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(hstmtl) != sql一no一data)if(columnlen>0)printffsname = %s sdept

18、 = %sn", sname,sdept);elseprintffsname = %s sdept = nulln", sname,sdept);#elsewhile(1 )retcode = sqlfetch(hstmtl);if(retcode = sql_no_data)sname,sdept,break;retcode = sqlgetdata(hstmt1, 1, sql_c_char,maxnamelen, &columnlen);retcode = sqlgetdata(hstmt1, 2, sql_c_char,maxnamelen, &columnlen);if(columnlen>0)printffsname = %s sdept = %sn", sname,sdept);elseprintffsname = %s sdept = nulln", sname,sdept);#endif/* clean up.*/sqlfreehandle(sql_handle_s

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論