【发布时间】:2013-07-01 14:48:50
【问题描述】:
我正在开发一个非常简单的应用程序,我打算用它来解决我在几台机器上遇到的问题,但在我还没走到那一步之前,我遇到了一些问题,包括 cpu 架构差异和 Oracle 数据库库。
我有一个列在tnsnames.ora 中的数据库服务器,它位于我的C:\oracle\11g\network\admin 目录中。如果我 tnsping 此服务器,我会得到所需的响应。如果我使用 Oracle.DataAccess.Client 编写我的 C# 程序以使用以下代码连接到该服务器,它就可以工作。
string connectionString = "Data Source=DSDSDS;User Id=UNUNUN;Password=PWPWPW;";
DataTable dataTable = new DataTable();
using (var connection = new OracleConnection(connectionString)) {
connection.Open();
using (var command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = sql;
command.CommandType = CommandType.Text;
using (var oda = new OracleDataAdapter(command)) {
oda.Fill(dataTable);
}
}
}
但是,Oracle.DataAccess 取决于运行它的系统的体系结构。我看到还有另一个库 Oracle.ManagedDataAccess 是架构独立的。当我使用这个库时,它不再能够连接到服务器。一个ORA-12545: Network Transport: Unable to resolve connect hostname 被抛出。
为什么会这样?这两个库之间有什么不同,因为根据我目前所读到的内容,这应该不是问题。
额外信息:
- %ORACLE_HOME% 和 %TNS_ADMIN% 未定义(请记住 tnsping 和 Oracle.DataAccess 有效)
- PATH 定义了
C:\oracle\11g\BIN。 - 我的机器只有一个
tnsnames.ora文件
如果我将 tnsnames.ora 移动到与我的 .exe 文件相同的位置,它就可以工作。为什么Oracle.DataAccess 可以在C:\oracle\11g\network\admin 目录下找到tnsnames.ora 而Oracle.ManagedAccess 却找不到?
【问题讨论】:
-
我实际上遇到了同样的问题,不管 app.config 中的 TNS_ADMIN 设置如何。
-
你解决了吗?你能解释一下吗?