Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ORA-12545:连接失败,因为目标主机或对象不存在-System.Data.OracleClient上没有错误_C#_Sql_Oracle - Fatal编程技术网

C# ORA-12545:连接失败,因为目标主机或对象不存在-System.Data.OracleClient上没有错误

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

不敢相信我会问这个问题,但我一辈子都无法连接到Oracle 11g数据库

在使用
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,都是需要检查的正确的东西。你解决了这个问题了吗?