C# ORA-12545:连接失败,因为目标主机或对象不存在-System.Data.OracleClient上没有错误
不敢相信我会问这个问题,但我一辈子都无法连接到Oracle 11g数据库 在使用C# ORA-12545:连接失败,因为目标主机或对象不存在-System.Data.OracleClient上没有错误,c#,sql,oracle,C#,Sql,Oracle,不敢相信我会问这个问题,但我一辈子都无法连接到Oracle 11g数据库 在使用System.Data.OracleClient时,下面的代码起作用,但显然这是被贬低的。 当使用完全相同的代码但使用Oracle.DataAccess.OracleClient时,我得到以下错误 {"ORA-12545: Connect failed because target host or object does not exist"} 这是我的密码 using (OracleConnection con
System.Data.OracleClient
时,下面的代码起作用,但显然这是被贬低的。
当使用完全相同的代码但使用Oracle.DataAccess.OracleClient时,我得到以下错误
{"ORA-12545: Connect failed because target host or object does not exist"}
这是我的密码
using (OracleConnection con = new OracleConnection("Data Source=orac;User Id=SYSTEM; Password=Pass;"))
{
con.Open();
Console.WriteLine("Connection opened");
OracleCommand cmd2 = new OracleCommand("SELECT * FROM SYSTEM.TABLE", con);
OracleDataReader oracleDataReader = cmd2.ExecuteReader();
while (oracleDataReader.Read())
{
Console.WriteLine(oracleDataReader[0]);
}
}
有人能帮我解决我做错了什么吗
我必须将程序更改为32位才能加载Oracle.DataAccess.dll
这是正确的库吗
谢谢
编辑
tnsnames.ora文件如下:
# tnsnames.ora Network Configuration File:
C:\app\UserName\product\11.2.0\dbhome_3\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orac.example.com)
)
)
LISTENER_ORAC =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
更新
我已尝试使用Oracle Sql developer进行连接。只要我使用TNS连接类型,它就可以工作,但如果我使用基本连接类型,它就不工作
我还注意到在我的服务中有两个
OracleOraDb11g_Home1TransListener
OracleOraDb11g\u Home2TransListener
orac dbhome是home3我相信,这可能是问题所在吗??
如果是这样的话,有人知道我将如何着手修复它吗
谢谢
更新
在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\中有两个属性(默认)和inst_loc。有几个文件夹,其中两个称为“KEY_OraDb11g_home1”和“KEY_OraDb11g_home2”。它们都包含一个名为ORACLE_HOME的属性,它们是:
KEY\u OraDb11g\u home1-ORACLE\u HOME=C:\app\UserName\product\11.2.0\dbhome\u 2
KEY\u OraDb11g\u home2-ORACLE\u HOME=C:\app\UserName\product\11.2.0\dbhome\u 3
home1中Db的SID称为OracleDev,我可能在很久以前的某个时候安装过它,但如果它导致问题,我现在肯定不需要它
谢谢编辑
我们试试别的吧
ODP.NET可能不知道在哪里可以找到Oracle Home,因为它未在PATH环境变量中定义,或者未在注册表中设置
检查您的路径,确保其中包含Oracle主目录和“Oracle Home\bin”。有关注册表,请查找
HKEY\U LOCAL\U MACHINE\SOFTWARE\ORACLE\
。其中应该有一个名为HOME0
的键,字符串值为ORACLE\u HOME
。确保它指向您的Oracle主页。检查C:\windows\system32\drivers\etc下的主机文件,特别是如果机器是VM,并且如果VM的IP地址不是静态的,本地主机的IP地址可能会更改。如有必要,请更改该文件上本地主机的IP。遇到类似问题:Visual Studio在..\11.2.0\client\u 1\network\admin中使用了错误的tnsnames.ora版本
TNS Ping在..\11.2.0\client\u 2\network\admin中使用了正确版本的tnsnames.ora 因此,tnsping成功,但Visual Studio返回:ORA-12545:Connect失败,因为目标主机或对象不存在
解决方案,可能不是最好的,将tnsnames.ora的正确版本复制到..\11.2.0\client\u 1\network\admin我不知道为什么,但在
tnsnames.ora
和listner.ora
中将HOST
设置为0.0.0
,对我很有效
当然,必须运行
lsnrctl start
tnsping orac返回正常。我已经附上了tnsnames.ora文件,看起来不错,但我肯定不是专家。System.Data.OracleCLient可以工作但不能工作的原因是什么?@Petersen好的,我用另一个(潜在的)解决方案更新了我的答案也许一些Oracle DBA可以介入?我在这方面的经验有限,恐怕我不知道如何继续。谢谢你的帮助。你所建议的一切都是很棒的IDE,都是需要检查的正确的东西。你解决了这个问题了吗?