2020:ASP連接Oracle數(shù)據(jù)庫問題的解決過程

盡管2020了,但是需求無處不在共虑,ASP連接Oracle數(shù)據(jù)庫問題的解決過程:


注意愧怜,本文為夢回大唐版本,盜圖嚴(yán)重妈拌,紕漏難免拥坛,歡迎舉報(bào)。


一尘分、環(huán)境

數(shù)據(jù)庫端:Windows Server 2008 R2 64位企業(yè)版 + Oracle 11.2.0.1.0 64位 企業(yè)版

客戶端:Windows Server 2008 R2 64位企業(yè)版 + IIS +ASP



二猜惋、連接Oracle

方式一:失敗。

Oracle官網(wǎng)下載的客戶端和ODBC驅(qū)動:

instantclient-basic-windows.x64-11.2.0.4.0

instantclient-odbc-windows.x64-11.2.0.4.0

Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC 安全更新_x64

(ODBC需要培愁,微軟這個挺難找著摔,只能找到更新,但是適用)

安裝過程大概是這樣:

裝Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package x64

將instantclient-basic和instantclient-odbc壓縮包里面的文件都放到一個文件夾定续。如: C:\oracle

創(chuàng)建C:\oracle\network\admin\tnsnames.ora梨撞,內(nèi)容如下:

APPORCL =

? (DESCRIPTION =

? ? (ADDRESS_LIST =

? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.30)(PORT = 1521))

? ? )

? ? (CONNECT_DATA =

? ? ? (SERVICE_NAME = orcl)

? ? )

? )

右鍵odbc_install.exe以管理員運(yùn)行,安裝odbc驅(qū)動香罐。

創(chuàng)建環(huán)境變量:

添加到系統(tǒng)的環(huán)境變量Path:C:\oracle;C:\oracle\bin

添加:TNS_ADMIN 值:C:\oracle\network\admin\tnsnames.ora

創(chuàng)建ODBC:

(默認(rèn)運(yùn)行的是64位)開始-管理工具-數(shù)據(jù)源(ODBC)-系統(tǒng)DSN-添加-選擇剛安裝的instantclient驅(qū)動卧波。

配置圖,盜用一下其他人的:

DataSourceName:新建一個連接名庇茫,在ASP頁面連接字符串時(shí)會使用此連接名港粱。

TNSserviceName:IP/實(shí)例名,中間使用斜桿分隔旦签。

User ID:數(shù)據(jù)庫登錄名查坪。

點(diǎn)擊“Test Connection”按鈕,輸入密碼測試成功宁炫。個人覺得配置完這個偿曙,TNS_ADMIN是不是沒用處,但沒有驗(yàn)證羔巢。方式三沒有使用ODBC望忆,才有用TNS_ADMIN。

打開IIS竿秆,添加測試網(wǎng)站:

1.測試網(wǎng)站選擇Classic .Net AppPool應(yīng)用程序池

2.Classic .Net AppPool應(yīng)用程序池啟用32應(yīng)用程序支持(True)

3.ASP開啟調(diào)試屬性启摄,將錯誤發(fā)送到瀏覽器True

4.添加連接數(shù)據(jù)庫測試頁面,測試頁面為UTF-8編碼格式:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>

<body>

<% Response.Charset = "utf-8" %>

<%

Dim connStr

Dim conn,sql,rs

Set conn = Server.CreateObject("ADODB.Connection")

conn.open "DSN=web32;UID=YCWEB;PWD=12345678;"

if err then

? ? err.clear

set Conn=Nothing

Response.Write "數(shù)據(jù)庫連接出錯幽钢,"

Response.End

else

? ? Response.Write "數(shù)據(jù)庫連接成功歉备,"

End If

sql = "select * from v_djkscjb where xh=201510300"

Set rs = conn.Execute(sql)

Do Until(rs.eof)

For i=0 to rs.fields.count-1

Response.Write (rs.fields(i))

Response.Write ("<br>")

Next

rs.MoveNext

Loop

rs.Close

Set rs = Nothing

conn.Close

Set conn = Nothing

%>

</body>

</html>

打開后報(bào):驅(qū)動架構(gòu)不符錯誤之類。

猜測:IIS和ASP是32位的匪燕,不能使用64架構(gòu)驅(qū)動蕾羊。于是轉(zhuǎn)戰(zhàn)方式二喧笔。



方式二:不完美。

首先龟再,去ODBC源刪除64位的系統(tǒng)DSN

卸載odbc的64位驅(qū)動溃斋,在C:\oracle目錄下右鍵odbc_uninstall.exe以管理員運(yùn)行。

清空C:\oracle下的所有文件吸申。

Oracle官網(wǎng)下載的32位客戶端和ODBC驅(qū)動:

instantclient-basic-nt-11.2.0.4.0

instantclient-odbc-nt-11.2.0.4.0

Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC 安全更新_x86

(odbc驅(qū)動要用到梗劫,微軟這個挺難找,只能找到更新截碴,但是適用)

客戶端和驅(qū)動安裝過程同64位梳侨。略。

創(chuàng)建ODBC:

開始-管理工具-數(shù)據(jù)源(ODBC)是64位的日丹,肯定不行走哺,32位的在這里:

C:\Windows\SysWOW64\odbcad32.exe

運(yùn)行后配置和64位一樣操作。

IIS配置同64位哲虾。

打開測試頁面丙躏,顯示連接成功。但束凑,Oracle返回來的數(shù)據(jù)中包含中文晒旅,這些中文都亂碼(變成????)。

苦苦切換編碼汪诉,無法解決废恋。但是網(wǎng)上有人遇到同樣問題,言語間是通過換連接方式解決了中文亂碼問題扒寄,但是沒有給出具體方法鱼鼓。于是就網(wǎng)上尋找還有其他方式?就找到了方式三该编。



方式三:完美迄本。

首先是找到OO4O ( Oracle Object For OLE ),但是oracle 11.2版本后就沒有了课竣。剛好我的是11.2嘉赎,可以使用。但是本文最后沒有使用這個稠氮。

因?yàn)榫W(wǎng)上搜索時(shí)找到這樣一種方式:

set adocon=Server.Createobject("adodb.connection")

adocon.open"Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"

OraOLEDB引起了我的注意曹阔,搜索后是半开,這個是ODAC的一個組件隔披。

Oracle 數(shù)據(jù)訪問組件 (ODAC)? 全稱:Oracle Data Access Components。

ODAC Components:

Oracle Developer Tools for Visual Studio

Oracle Data Provider for .NET

Oracle Providers for ASP.NET

Oracle Database Extensions for .NET -- available in 12.2 and earlier for upgrade only

Oracle Provider for OLE DB

Oracle OLAP Provider for OLE DB -- 18c and higher

Oracle Services for Microsoft Transaction Server

Oracle ODBC Driver

Oracle SQL*Plus

Oracle Instant Client

其中有個組件寂拆,Oracle Provider for OLE DB奢米。就是這個抓韩。

官方下載的是ODAC 11.2.0.3.20版本。多次搜索后發(fā)現(xiàn)官方還有ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy下載鬓长,ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy里面還有OO4O驅(qū)動谒拴,但是我們不使用這個。

當(dāng)然涉波,我們下載的都是32位的版本,因?yàn)樽詈笠呀?jīng)成功,64位沒有測試跺株。

這次我使用的是ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy 32位宅楞。

里面的readme很詳細(xì)告訴你怎么安裝。

instantclient_11_2:這是Oracle客戶端窗声,所有組件的運(yùn)行都依賴于這個客戶端相恃;

oledb:這是OLE DB組件

oo4o:是OO4O組件。

asp.net:這是ASP.NET2組件

asp.net4:這是ASP.NET4組件

odp.net4:這是.NET4組件

odp.net20:這是.NET2組件

oramts:這是Oracle的MTS服務(wù)

network:它是用來存放tnsnames.ora文件的笨觅,要安裝后才能用拦耐。

首先,去ODBC源刪除32位的系統(tǒng)DSN

卸載odbc的32位驅(qū)動见剩,在C:\oracle目錄下右鍵odbc_uninstall.exe以管理員運(yùn)行杀糯。

清空C:\oracle下的所有文件。并去除相關(guān)環(huán)境變量設(shè)置苍苞。

在cmd中cd到這個目錄:輸入 install.bat all c:\oracle odac 省麻煩火脉,安裝了所有組件。

c:\oracle是安裝目錄柒啤,odac是寫注冊表用(名字任意)

單個組件這樣裝:

install.bat oledbc:\oracle odac false

這時(shí)就只會安裝oledb倦挂,而不會把oledb和instantclient_11_2也裝上。

創(chuàng)建環(huán)境變量(路徑一樣担巩,上面也可不清除):

添加到系統(tǒng)的環(huán)境變量Path:C:\oracle;C:\oracle\bin

添加:TNS_ADMIN 值:C:\oracle\network\admin\tnsnames.ora

三種方式的tnsnames.ora都是一樣的方援。

直接到了IIS這部,配置和其他方式都一樣涛癌。

測試頁面配置要修改:

<%

set conn=server.createobject("adodb.connection")

dns="Provider=OraOLEDB.Oracle;User ID=YCWEB;Password=12345678;Data Source=APPORCL"

conn.Open dns

SQL="select XH,XM,XN,XQ,KCMC,ZSCJ from v_ggdjkscjb where xh=201510300"

'學(xué)號XH,姓名XM,學(xué)年XN,學(xué)期XQ,課程名稱KCMC,成績ZSCJ

set rs=conn.execute(SQL)

Do Until(rs.eof)

For i=0 to rs.fields.count-1

Response.Write (rs.fields(i))

Response.Write ("<br>")

Next

rs.MoveNext

Loop

SQL2="select XH,XM,XN,XQ,KCMC,ZSCJ,BKCJ from v_cyyjb where xh=201510300"

'學(xué)號XH,姓名XM,學(xué)年XN,學(xué)期XQ,課程名稱KCMC,期末成績ZSCJ,補(bǔ)考成績BKCJ

set rs2=conn.execute(SQL2)

Do Until(rs2.eof)

For i=0 to rs2.fields.count-1

Response.Write (rs2.fields(i))

Response.Write ("<br>")

Next

rs2.MoveNext

Loop

rs.Close

set rs=nothing

rs2.Close

set rs2=nothing

conn.close

set conn=nothing

%>

注意:Data Source=APPORCL犯戏,跟tnsnames.ora一樣。

重啟服務(wù)器拳话。

重啟服務(wù)器先匪。

重啟服務(wù)器。

打開測試頁面弃衍,中文顯示正常了呀非。

三、總結(jié):

ODBC不靠譜,

OO4O已退出岸裙,

OLEDB顯示器猖败。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市降允,隨后出現(xiàn)的幾起案子恩闻,更是在濱河造成了極大的恐慌,老刑警劉巖剧董,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幢尚,死亡現(xiàn)場離奇詭異,居然都是意外死亡翅楼,警方通過查閱死者的電腦和手機(jī)侠草,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犁嗅,“玉大人边涕,你說我怎么就攤上這事」游ⅲ” “怎么了功蜓?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宠蚂。 經(jīng)常有香客問我式撼,道長,這世上最難降的妖魔是什么求厕? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任著隆,我火速辦了婚禮,結(jié)果婚禮上呀癣,老公的妹妹穿的比我還像新娘美浦。我一直安慰自己,他們只是感情好项栏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布浦辨。 她就那樣靜靜地躺著,像睡著了一般沼沈。 火紅的嫁衣襯著肌膚如雪流酬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天列另,我揣著相機(jī)與錄音芽腾,去河邊找鬼。 笑死页衙,一個胖子當(dāng)著我的面吹牛摊滔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惭载,長吁一口氣:“原來是場噩夢啊……” “哼旱函!你這毒婦竟也來了响巢?” 一聲冷哼從身側(cè)響起描滔,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踪古,沒想到半個月后含长,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伏穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年拘泞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枕扫。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡陪腌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烟瞧,到底是詐尸還是另有隱情诗鸭,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布参滴,位于F島的核電站强岸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏砾赔。R本人自食惡果不足惜蝌箍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暴心。 院中可真熱鬧妓盲,春花似錦、人聲如沸专普。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脆诉。三九已至甚亭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間击胜,已是汗流浹背亏狰。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偶摔,地道東北人暇唾。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親策州。 傳聞我的和親對象是個殘疾皇子瘸味,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容