我正在尝试使用我的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
,则返回OK(100ms);
答案 0 :(得分:0)
最后,我通过干净安装的Oracle Client和ODT for VisualStudio来管理它,并且它工作正常,我现在永远不会出现这个问题。
答案 1 :(得分:0)
如果您在线程环境中使用Connection,则可能有助于为不同的线程分配单独的Connections。 OracleConnection对象似乎不是线程。
我遇到了完全相同的问题,我可以追溯到这个原因。
答案 2 :(得分:0)
似乎有很多导致此错误的原因。要检查的另一件事是运行应用程序的计算机上Oracle.DataAccess.dll和Oracle客户端的兼容性。
here描述了检查版本兼容性的符号-例如,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]
会的。
因此,我使用了较旧版本的客户端。