【发布时间】:2015-08-17 07:34:43
【问题描述】:
我们使用 Oracle 11g 64 位 odp 客户端连接到 11g 数据库。我们最近升级到了 Oracle 12c。我在本地机器(Windows Server 2008 R2 64 位)中卸载了 11g odp 客户端。我确保从regedit.exe 中删除了注册表项。安装Oracle 12c 64位后,可以成功建立连接。但是在我尝试使用 OracleConnection.close() 关闭连接时提交后,我得到了
"AccessViolationException: 试图读或写保护 记忆。这通常表明其他内存已损坏”。
我使用 Visual Studio 2010 Professional 作为 IDE。请告诉我 如何解决这个问题。下面是异常的堆栈跟踪:
在 Oracle.DataAccess.Client.OpsCon.Close(IntPtr& opsConCtx, IntPtr& opsErrCtx, OpoConValCtx* pOpoConValCtx, OpoConRefCtx pOpoConRefCtx)
在 Oracle.DataAccess.Client.ConnectionPool.CheckLifeTimeAndStatus(OpoConCtx& opoConCtx, Boolean bDistTxnActive, Boolean& bClosed, Int32 bFromPool, 布尔 bCheckLifetimeOnly,布尔 bFreeValCtxOnDispose,布尔 isPopulatePool) 在 Oracle.DataAccess.Client.ConnectionPool.PutConnection(OpoConCtx& opoConCtx,布尔值 bDoNotAllocValCtx,布尔值 bCheckStatus,布尔值 bCheckLifeTime, Int32 bDistTxnActive, Boolean isPopulatePool, Boolean bFreeValCtxOnDispose) 在 Oracle.DataAccess.Client.ConnectionDispenser.Close(OpoConCtx& opoConCtx,布尔 isContextConnection)在 Oracle.DataAccess.Client.OracleConnection.Close()
【问题讨论】:
-
在您的机器上搜索 oci.dll。它是许多其他 Oracle 客户端 DLL 的一部分。如果您发现它删除/重命名您在该位置找到的所有其他 Oracle DLL。有可能一些旧的客户端 DLL 被遗留在了意想不到的地方,并且正在被加载并且不匹配,
标签: c# oracle access-violation odp.net oracle12c