【问题标题】:this is error ORA-12154: TNS:could not resolve the connect identifier specified?这是错误 ORA-12154:TNS:无法解析指定的连接标识符?
【发布时间】:2013-12-03 20:46:20
【问题描述】:

我有这个代码:

OracleConnection con = new OracleConnection("data source=localhost;user id=fastecit;password=fastecit"); 
con.Open(); string sql="Select userId from tblusers";    
OracleCommand cmd = new OracleCommand(sql, con);
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{ messageBox.Show(dr[0].Tostring()); } 

两个项目中的代码相同,

在 project1 中的“WinForm”工作正常

在project2“Excel 2007 addins”中出现如下错误:

ORA-12154: TNS: 无法解析指定的连接标识符

我正在使用 C#.net 2010、office 2007、windows8、oracle 10g。

准备手动连接数据库时,如图

Visual Studio,打开查看菜单 + 服务器资源管理器。

鼠标右键单击数据连接+添加连接+选择Oracle数据库 server Name : localhost 或者我的机器名,设置用户名和密码点击测试连接,测试没有成功。

【问题讨论】:

  • 您不必在某处指定数据库名称吗?
  • 是的,我无法在某处指定数据库
  • 相同的代码在 Project1 "winForms" 和同一台机器上正常工作,但在另一个项目 "Excel 2007 addins" 中不能正常工作
  • project1 或 project2 是 64 位的吗?您的 PATH 环境变量中是否有多个 Oracle Home?
  • project1 "winForms" Platform =x86 , output type =WindoseApplaciton.Project2 Platform =active any cpu, output type "Class Library"

标签: c# oracle excel-addins


【解决方案1】:

在命令提示符下运行以下命令

tnsping 数据源

这应该给出如下响应

C:>tnsping *******

适用于 *** Windows 的 TNS Ping 实用程序:版本 *** - 在 ***** 上生产

版权所有 (c) 1997、2014、甲骨文。保留所有权利。

使用的参数文件: c:\oracle*****

用****解析别名 正在尝试联系 (description=(address_list=(address=(protocol=tcp)(host=)(port=))))(connect_data =(server=)(service_name=)(failover_mode=(type=)(method=)(重试=)(延迟=))))** 好的(**** 毫秒)

在开头添加文本“Datasource=”,在末尾添加凭据。 最后的字符串应该是

数据源=(description=(address_list=(address=(protocol=tcp)(host=)(port=)) )(connect_data=(server=)(service_name=)(failover_mode=(type=)(method= )(retries=)(d​​elay=))));用户ID=;密码=;**

使用它作为连接字符串连接到oracle db。

【讨论】:

    【解决方案2】:

    ORA-12154:TNS:无法解析指定的连接标识符?

    如果 TNS 没有定义,你也可以试试这个:

    如果您使用C#.net 2010或其他版本的VS和oracle 10g express版或更低版本,并且您制作这样的连接字符串:

    static string constr = @"Data Source=(DESCRIPTION=
        (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=yourhostname )(PORT=1521)))
        (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)));
        User Id=system ;Password=yourpasswrd"; 
    

    之后您会收到错误消息ORA-12154: TNS:could not resolve the connect identifier specified 然后首先您必须重新启动系统并运行您的项目。

    如果您的 windows 是 64 位,那么您需要安装 oracle 11g 32 位,如果您安装的是 11g 64 位,那么您需要使用 Oracle Developer Tools for Visual Studio 11.2 版安装 Oracle 11g Oracle 数据访问组件 (ODAC)。来自 OTN 的 0.1.2 或更高版本,并在 Oracle Universal Installer 中检查 请确保检查以下内容:

    Oracle Data Provider for .NET 2.0
    
    Oracle Providers for ASP.NET
    
    Oracle Developer Tools for Visual Studio
    
    Oracle Instant Client 
    

    然后重新启动您的 Visual Studio,然后运行您的项目.... 注意:- 需要重新启动系统才能解决此类错误......

    【讨论】:

    • 谢谢你..直接使用连接字符串中的描述解决了这个问题......
    • 你必须重启什么?客户端还是服务器?通常你可以通过只重启一些特定的服务来解决“重启”问题..
    • 它有效,你拯救了我的一天,谢谢!如果没有,请尝试将 HOST dns 名称更改为 IP 地址。
    • 重新启动客户端机器使它对我有用。在此之前,我什至无法通过 ODBC 工具测试连接。谢谢!
    【解决方案3】:

    数据库必须有名字(例如 DB1),试试这个:

    OracleConnection con = new OracleConnection("data source=DB1;user id=fastecit;password=fastecit"); 
    

    如果没有定义 TNS,你也可以试试这个:

    OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DB1)));
    User Id=fastecit;Password=fastecit"); 
    

    【讨论】:

    • 我没有 DB1,我使用了案例 2 错误“ORA-06413: Connection not open”
    • C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ora ,XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = pcmax) )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
    • 我希望你能帮助我@Wernfried
    • 那就是这个:OracleConnection con = new OracleConnection("data source=XE;user id=fastecit;password=fastecit");
    • ORA-12514:TNS:listener 目前不知道连接描述符中请求的服务是我现在得到的错误。
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多