从C#访问Oracle数据库

时间:2009-06-30 13:53:49

标签: c# database oracle

我有一个C#程序,它使用System.Data.OracleClient来访问oracle数据库。

代码使用OracleCommand,OracleDataReader对象。它使用TNS名称来引用特定的oracle服务器(如tnsnames.ora文件中所定义)。

它在我的电脑上运行正常。然后我将二进制文件复制到另一台计算机,运行时遇到错误:

TNS:无法解析指定的连接标识符。

另一台计算机安装了相同版本的oracle客户端,并且在oracle网络/ admin文件夹中删除了相同的tnsnames.ora副本。另一台计算机也安装了SQLDeveloper,我可以使用SQLDeveloper中的那些TNS名称连接到oracle服务器。

为什么c#程序抱怨无法解析TNS标识符?

我使用的连接字符串(硬编码到我的c#程序中)是;

“数据源= TNS名称;用户ID =用户;密码=通过;”

由于

4 个答案:

答案 0 :(得分:3)

打开一个命令窗口,输入tnsping yourdbname然后点击回车,你应该得到一堆信息,但你想要找的是

  

使用过的参数文件:

     

C:\甲骨文\产品\ 10.1.0 \的Client_1 \网络\管理员\ SQLNET.ORA

或类似的东西,这是系统上的“默认”Oracle客户端,请确保这与您拥有tnsnames.ora的路径相同(在我的情况下,我们使用sqlnet.ora)

有时多个Oracle产品安装会产生多个潜在的ORA_HOME,您至少可以确认“活动”客户端,这样您就可以确定文件位于正确的位置。

此外,您可以使用SQLPlus连接到数据库吗?

答案 1 :(得分:0)

是否找不到或加载tnsnames.ora文件?尝试运行ProcessMonitor(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx),然后运行c#程序。您可以看到它是否找不到.ora文件。

答案 2 :(得分:0)

您还可以通过将环境变量TNS_ADMIN设置为tnsnames.ora和sqlnet.ora文件的位置(默认情况下为ORACLE_HOME / network / admin),强制Oracle查找网络文件的固定位置。

然后,您不必担心猜测当前正在运行的特定Oracle进程正在使用哪个network / admin文件夹。

答案 3 :(得分:0)

最终我的问题是我的机器上安装了多个Oracle实例,需要更新我不知道的第三个tnsnames.ora文件。

对于它的价值,我在运行tnsping [dbName]时得到了误报。这是有用的信息,但需要进一步调查。只有当我去检查Windows环境变量时,我才注意到另一个Oracle路径并找到了第三个tnsnames.ora

相关问题