程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .net程序遠程連接Oracle數據庫

.net程序遠程連接Oracle數據庫

編輯:關於.NET

.net 遠程連接Oracle數據庫看起來挺簡單的,但實際做起來還是遇到不少問題。把我今天折騰這個 東西的經驗給大家共享吧。

訪問 oracle 數據庫的方式很多,我用的是 OleDbConnection,這個沒什麼好說的,代碼如下:

1. 連接代碼

_OleDbConnection = new OleDbConnection(connectionString);
_OleDbConnection.Open();

2.連接字符串

遠程連接的連接字符串可以這樣寫

provider=MSDAORA;host=192.168.1.1;data source=MyTest;user id=system;password=xxx

provider = MSDAORA; 指明oledb 的提供者是oracle數據庫

host 是遠程 oracle 數據庫所在服務器的IP地址,如果端口不是默認的 1521,還要加上一個 Port=xxxx;

data source 是要訪問的 oracle 數據庫的名字

user id 和 password 就不說了。

要能夠成功運行上面代碼,我們必須在代碼運行的機器上安裝 oracle 的客戶端,否則會報

The Oracle(tm) client and networking components were not found 這個錯誤。

3. 主機防火牆設置

我的 Oracle 安裝在 windows 2003 server 上,為了安全起見,必須設置防火牆

我在 windows 2003 下將 1521 端口開放,發現無法連接數據庫,抓包看了一下,oracle 客戶端在 連接了 1521 後又去連接了一個隨機的端口 1197

查了一下資料,oracle 的 network listener 只起一個中介作用,當客戶連接它時,它根據配置尋 找到相應的數據庫實例進程,然後分配一個新的數據庫連接,這個連接端口由network listener傳遞給 客戶機,此後客戶機就不再和network listener打交道了,而是和 oracle.exe 這個進程打交道了。這 個新的連接端口是不可預知的,因而會被防火牆阻止。

要解決這個問題,網上查到的辦法是采用共享套接字,這個方法應該是一個比較通用的辦法,如何做 詳見

在windows server 2003系統防火牆上開放Oracle服務端口 連接1521 TNS超時

不過我偷了個懶,因為我只用 windows 的防火牆,windows 防火牆可以對某個進程開放所有端口。 所以只要按下面圖示的方式設置一下windows 防火牆,就可以訪問了。

4. 客戶端和服務器的字符集

插入中文時顯示亂碼,需要將客戶端和服務器的NLS_LANG 都設置為

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

Windows 下

修改注冊表

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0 下的NLS_LANG (9i)

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb10g_home1 下的NLS_LANG (10g)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved