簡體   English   中英

嘗試連接到Oracle數據庫時發生OracleConnection.Open()AccessViolationException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM