从 C# 访问 Oracle 数据库
Posted
技术标签:
【中文标题】从 C# 访问 Oracle 数据库【英文标题】:Accessing Oracle Database from C# 【发布时间】:2009-06-30 13:53:48 【问题描述】:我有一个使用 System.Data.OracleClient 访问 oracle 数据库的 C# 程序。
代码使用 OracleCommand、OracleDataReader 对象。它使用 TNS 名称来引用特定的 oracle 服务器(在 tnsnames.ora 文件中定义)。
它在我的电脑上运行良好。然后我将二进制文件复制到另一台计算机,运行时遇到错误:
TNS:无法解析指定的连接标识符。
另一台计算机安装了相同版本的 oracle 客户端,并且 tnsnames.ora 的相同副本放在 oracle network/admin 文件夹中。另一台计算机也安装了 SQLDeveloper,我可以使用其 SQLDeveloper 中的这些 TNS 名称连接到 Oracle 服务器。
为什么c#程序抱怨无法解析TNS标识符?
我使用的连接字符串(硬编码到我的 c# 程序中)是 ;
"数据源=TNS 名称;用户 ID=user;密码=pass;"
谢谢
【问题讨论】:
我知道这并不能回答您的问题,但作为仅供参考,System.Data.OracleClient 已被弃用。 blogs.msdn.com/adonet/archive/2009/06/15/… 【参考方案1】:打开一个命令窗口,输入tnsping yourdbname
并回车,你应该会得到一堆信息,但你要查找的是
使用的参数文件:
C:\Oracle\product\10.1.0\Client_1\network\admin\sqlnet.ora
或类似的东西,这是系统上的“默认”Oracle 客户端,确保这与您拥有 tnsnames.ora 的路径相同(在我的情况下,我们使用 sqlnet.ora)
有时多个 Oracle 产品安装会产生多个潜在的 ORA_HOME,您至少可以确认“活动”客户端,这样您就可以确定文件在正确的位置。
另外,你可以使用 SQLPlus 连接到数据库吗?
【讨论】:
同意多房的可能性 很好的答案!每次我遇到类似的问题时,要么是路径中有多个家,要么是 sqlnet.ora 中的设置不正确。【参考方案2】:是否无法定位或加载 tnsnames.ora 文件?尝试运行 ProcessMonitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx),然后运行您的 c# 程序。您可以查看是否找不到.ora文件。
【讨论】:
【参考方案3】:您还可以通过将环境变量 TNS_ADMIN 设置为您的 tnsnames.ora 和 sqlnet.ora 文件的位置(默认为 ORACLE_HOME/network/admin)来强制所有 Oracle 在固定位置查找网络文件。
那么您不必担心猜测您当前正在运行的特定 Oracle 进程正在使用哪个网络/管理文件夹。
【讨论】:
【参考方案4】:最终我的问题是我的机器上安装了多个 Oracle 实例,并且需要更新我不知道的第三个 tnsnames.ora 文件。
不管怎样,我在运行tnsping [dbName]
时得到了误报响应。这是有用的信息,但需要进一步调查。去检查Windows环境变量的时候才注意到另一个Oracle路径,发现第三个tnsnames.ora
【讨论】:
以上是关于从 C# 访问 Oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章