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

ASP.NET連接Oracle的四個常見問題

編輯:關於ASP.NET

ASP.NET連接Oracle問題1:System.Exception: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater

原因:NTFS權限問題,在ORACLE9I時總是遇到

解決方法:

1、以管理員的用戶登錄;

2、找到ORACLE_HOME文件夾(我的是C:\oracle\ora92),點右鍵,選屬性--安全,在組或用戶欄中選“Authenticated Users”,在下面權限列表中把“讀取和運行”的權限去掉,再按應用;重新選上“讀取和運行”權限,點擊應用;選權限框下面的“高級”按鈕,確認“Authenticated Users”後面的應用於是“該文件夾、子文件夾及文件”,按確定把權限的更改應用於該文件夾;

3、重新啟動計算機,讓權限設置生效(請注意,這一步很重要);

4、登錄後運行asp.net應用,正常取得Oracle數據庫的數據。

ASP.NET連接Oracle問題2:ORA-12560: TNS: 協議適配器錯誤

解決方法:

①.檢查Terminal Service, 遠程桌面是不是起因

②.環境變量set oracle_sid=需要的服務名

③.listener.ora, tnsnames.ora等內機器名或者IP地址是否正確

④.netstat -a檢查端口是否被占用

⑤.檢查注冊表HKEY_LOCAL_MACHINE\Software\Oracle\Home0新增字符串USE_SHARED_SOCKET =True

ASP.NET連接Oracle問題3:ORA-12571、ORA-03113、ORA-03114、ORA-01041

特征:客戶端(代理或應用服務器)有時報這類斷連錯誤

原因:如果偶爾出現一次,則可能為網絡原因或用戶異常中止,如果經常出現則為客戶端與服務端的字符集不一致。

措施:如果偶爾出現,可在服務端的協議配置文件PROTOCOL.ORA中增加一行TCP.NODELAY=YES;

如果經常出現,則為客戶端與服務端字符集不一致或網絡原因。

客戶端的字符集在注冊表裡定義:

HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG

在客戶端注冊表中的TCP參數項中設置:   

TCPMAXDATARETRANSMITIONS=20。

ASP.NET連接Oracle問題4:使用VS.NET鏈接Oracle時報錯:

ORA-03114: not connected to Oracle

解決方法:

在打了下面的補丁後,問題依舊:

FIX: A pooled connection is not disposed by Microsoft .NET Managed Provider for Oracle when an exception occurs

http://support.microsoft.com/default.aspx?scid=kb;en-us;830173

產生該原因是ADO.NET將一個無效的Oracle連接放回了連接池,當下一次使用時就會產生問題。所以解決方法是禁用連接池。禁用連接池的方法是在連接字符串中將pooling 設為false。

最後,通過禁用連接池並在每次session開始的時候關閉連接然後重新建立解決了問題。

問題由於oracle重啟或者連接中斷而ADO.Net仍然未釋放連接所致,解決方法是通過禁用OracleClient的Pooling,禁用方法是在連接字符串中加上Pooling=false.

另外,據了解,Sql Server重啟也會引起Asp.Net類似的問題,如果使用SqlClient,也可以用同樣的方法禁用Pooling.若是OLEDB的連接方式,則在連接字符串中加上OLE DB Services=-4;來禁用Connection Pool.

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