[英]OracleConnection.Open() AccessViolationException when try to connect to oracle database
我正在嘗試使用c#應用程序連接到遠程oracle數據庫,但是當涉及到oracleconnection.open()時,它將退出
AccessViolationException未處理-嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞
我的連接字符串是app.config文件中的key="oracleconnectionstring" value="Data Source=XYZ; password=mypassword; User ID=myuserid"
。
tnsnames.ora是
XYZ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = HostName)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XYZ)
)
)
如果我嘗試通過Sql Developer進行連接,則連接不會出現任何問題,如果我嘗試SqlPlus,它將崩潰(Sql * Plus已停止工作),如果我嘗試使用VS,則會出現奇怪的錯誤。
會是什么
編輯:如果我嘗試tnsping xyz
它將返回確定(100毫秒);
最后,我通過全新安裝了Visual Studio的Oracle客戶端和ODT進行了管理,並且可以正常工作,但我現在再也不會出現問題了。
如果在線程環境中使用Connection,則可能有助於將單獨的Connection分配給不同的線程。 OracleConnection對象似乎不是threadave。
我遇到了完全相同的問題,可以將其追溯到這個原因。
似乎有很多導致此錯誤的原因。 要檢查的另一件事是運行應用程序的計算機上Oracle.DataAccess.dll和Oracle客戶端的兼容性。
這里描述了檢查版本兼容性的符號-作為示例,Oracle客戶端版本11.2.0.2對應於Oracle.DataAccess.dll的版本4.112.2.0。 您可以例如通過運行sqlplus -v
來檢查客戶端的版本,並通過右鍵單擊它並轉到“詳細信息”選項卡來檢查DLL的版本。
邊注:
在我的特定情況下,它甚至更陌生-即使在紙上,我的客戶端與Oracle.DataAccess.dll兼容,但仍然不起作用。
我將問題跟蹤到ORACLE_HOME / bin / OraOps12.dll,結果發現如果我使用文件的版本
[2.121.2.0 ODAC版本4; 修改日期2017/09/25]
它不起作用,但是如果我使用版本
[2.121.2.0; 修改日期2014/09/08]
是的。
因此,我使用了較舊版本的客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.