當(dāng)前位置: 首頁(yè)IT技術(shù) → ASP里鏈接數(shù)據(jù)庫(kù)出錯(cuò)的經(jīng)驗(yàn)分享

ASP里鏈接數(shù)據(jù)庫(kù)出錯(cuò)的經(jīng)驗(yàn)分享

更多

本文分享的是一個(gè)作者的小經(jīng)驗(yàn)之談,關(guān)于ASP里鏈接數(shù)據(jù)庫(kù)出錯(cuò)的經(jīng)驗(yàn)分享,希望能幫助到大家。

首先申明,我不是什么高手,只是結(jié)合自己的那點(diǎn)微不足道的經(jīng)驗(yàn),以及一直有人在QQ上問(wèn)我,很多相關(guān)數(shù)據(jù)庫(kù)操作的問(wèn)題,大多總接下來(lái),其實(shí)和很多ASP程序員自己對(duì)數(shù)據(jù)庫(kù)相關(guān)知識(shí)的領(lǐng)會(huì)多少有關(guān)系,剛好今天在CSDN上看到有人在討論這樣的問(wèn)題,我覺(jué)得有必要理清楚很多自己或他人不清楚的內(nèi)容。 

  對(duì)與數(shù)據(jù)庫(kù)操作的理解,看看下面的內(nèi)容,也許會(huì)更清楚一些! 

  1) 用SET建立連接對(duì)象 (這里是建立程序和數(shù)據(jù)庫(kù)操作通道, 

set cnobj = Server.CreateObject("ADODB.Connection") 

  2)給出數(shù)據(jù)庫(kù)驅(qū)動(dòng)的生產(chǎn)廠商和版本號(hào)以及你的access數(shù)據(jù)庫(kù)所在的位置 

strcon="provider=microsoft.jet.oledb.4.0;data source="&Server.MapPath("/wang/data/bbs.mdb") 

  記住:strcon是字符串變量你可以隨便給,server.mappath是取數(shù)據(jù)庫(kù)的磁盤路徑,后面所跟的一定是站點(diǎn)路經(jīng)。 

  本句也可以寫成: 

strconn = "DRIVER=Microsoft Access Driver (*.mdb);DBQ="&Server.MapPath("("/wang/data/bbs.mdb")") 

  3)用鏈接對(duì)象的OPEN方法打開數(shù)據(jù)庫(kù) 

cnobj.Open strcon 

  到此連接完成,后面就是建立記錄集對(duì)象了,如: 

set rstobj=server.createobject("adodb.recordset") '此句用SET語(yǔ)句建立記錄集對(duì)象RSTOBJ 
set rstobj=cnobj.execute("select * from users") '此句利用cnobj對(duì)象的execute方法執(zhí)行SELECT查詢語(yǔ)句,users是庫(kù)中的表名稱

  帶密碼的連接: 

Conn1.Open "Provider=Microsoft.JET.OLEDB.3.51;" & _ 
"Data Source=G:\ComponentSource\DBFiles\CSMain\CSMain.mdb;" & 
"Jet OLEDB database Password=outlook" 

  問(wèn)題現(xiàn)象比較多的一類就是: 

  以前一切正常的程序,現(xiàn)在運(yùn)行的時(shí)候提示如下信息: 

Microsoft VBScript 編譯器錯(cuò)誤 錯(cuò)誤 '800a03f6' 缺少 'End' 

/iisHelp/common/500-100.asp,行242 

Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80004005' 

[Microsoft][ODBC Microsoft Access Driver]常見(jiàn)錯(cuò)誤 不能打開注冊(cè)表關(guān)鍵字 'Temporary (volatile) Jet DSN for process 0x570 Thread 0x738 DBC 0x242e404 Jet'。 

/bbs/index.asp,行7 

  為什么?我也說(shuō)不清楚,但是我的經(jīng)驗(yàn)就是這樣,因?yàn)閃indows2000 SP2以后的新bug造成的。也許微軟不喜歡ODBC了,所以出此下策。正確的方法是使用OLEDB來(lái)連接Access。連接字符串為:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=數(shù)據(jù)庫(kù)文件名 

  我不知道我這樣理解對(duì)不對(duì),OLEDB比ODBC更直接面向數(shù)據(jù)庫(kù),這樣打個(gè)比方,如果你希望到電影院去看電影,從家里出門,有兩路車可以到電影院,兩路車為100路和10路,100路車需要在某站下車然后換10路在走一個(gè)站可以到電影院,10路當(dāng)然可以直接到電影院,可能都成習(xí)慣了,搭公車喜歡做100路車,呵!雖然我也知道10路可以直達(dá)目的地。這里非常羅嗦,也有些不符合一般常人的邏輯(大款除外),問(wèn)題是我要說(shuō)的ODBC和OLEDB就相單于100路和10路。而電影院就是我們要操作的數(shù)據(jù)庫(kù)。那我們?yōu)槭裁床皇褂肙LEDB呢?不怕見(jiàn)笑。我現(xiàn)在想的就是這樣。這個(gè)問(wèn)題實(shí)在太普遍了!所以說(shuō)得這么多! 

<% 
dim DB 
DB="數(shù)據(jù)庫(kù)名" '定義數(shù)據(jù)庫(kù)路徑及名稱 
Set conn = Server.CreateObject("ADODB.Connection") 
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(DB) 
%> 

  解接問(wèn)題必須注意使用上面的連接方式! 還有很多,今天先說(shuō)這些,如果我的理解有不正確的地方,希望高手牛人指正!

熱門評(píng)論
最新評(píng)論
發(fā)表評(píng)論 查看所有評(píng)論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)