工作中一個項目需要從Oracle資料庫中讀取資料,部署時總是提示“需要 oracle 用戶端軟體 8.1.7 或更高版本” 從網上找資料也是說安裝完Oracle 用戶端之後需要設定許可權之類的,但是一個幾十兆的軟體給客戶附加一個幾百兆的Oracle用戶端上去,總感覺不爽吧,從網上查到 有 Oracle 9i 精簡版用戶端12.1M,於是想到訪問Oracle無非就是使用了Oracle的一些Dll 和系統內容變數或者註冊表裡的某些索引值,安裝Oracle 9i 精簡版用戶端應該足夠了。經過幾個小時的 使用權限設定、串連串設定、設定檔設定 折磨後解決方案如下:
1. 安裝 Oracle 9i 精簡版用戶端,修改tnsnames.ora檔案(預設路徑C:\Oracle\ora90\network\ADMIN),修改內容如下:
# TNSNAMES.ORA Network Configuration File: C:\oracle\ora90\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
#sample
#DATABASENAME =
# (DESCRIPTION =
# (ADDRESS_LIST =
# (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
# )
# (CONNECT_DATA =
# (SERVICE_NAME = servicename)
# )
# )
ORACLE = #這個名稱在後面的連接字串上用到了
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = iii)(PORT = 1521)) #修改紅色的 iii 為Oracle資料庫伺服器的名稱或IP地址
)
(CONNECT_DATA =
(SERVICE_NAME = oracle) #修改紅色的oracle 為資料庫名稱
)
)
ORACLEBCV =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 130.81.100.136)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = scbus)
)
)
REPORT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 9.83.70.14)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = report)
)
)
修改註冊表中 Oracle子鍵 NLS_LANG 的值和Oracle資料服務器上的一致,否則查詢過來的內容是亂碼。最後重啟機器。
2. 串連Oracle資料庫的連接字串寫法
<add name="DataAccessLibrary.Properties.Settings.ConnectionString"
connectionString="Provider=MSDAORA;Data Source=oracle;Persist Security Info=True;Password=outpadm;User ID=outpadm"
providerName="System.Data.OleDb" /> #黃色的部分要和上面設定檔裡黃色的部分一樣
這樣問題解決,在xp下訪問win2003下的 Oracle 10G 資料庫 成功。
雖然用了很長時間,但是感覺這樣在客戶那部署時會省下將近20-30分鐘的時間。