【发布时间】:2013-08-17 15:20:46
【问题描述】:
不敢相信我不得不问这个问题,但我终生无法连接到 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 开发人员进行连接。只要我使用 TNS 连接类型,它就可以工作,但如果我使用 Basic 连接类型,它就不起作用。
我还注意到,在我的服务中有 2 个名为
OracleOraDb11g_home1TNSListener OracleOraDb11g_home2TNSListener
我相信 orac dbhome 是 home3,这可能是问题吗? 如果是这样,有人知道我将如何解决它吗?
谢谢
更新 在 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ 中有两个属性(默认)和 inst_loc。有几个文件夹,其中两个分别称为“KEY_OraDb11g_home1”和“KEY_OraDb11g_home2”,它们都包含一个名为 ORACLE_HOME 的属性:
KEY_OraDb11g_home1 - ORACLE_HOME = C:\app\UserName\product\11.2.0\dbhome_2 KEY_OraDb11g_home2 - ORACLE_HOME = C:\app\UserName\product\11.2.0\dbhome_3
home1 中 Db 的 SID 是一个叫做 OracleDev 的东西,我可能很久以前就安装了它,但如果它引起问题我现在肯定不需要它
谢谢
【问题讨论】: