最初我使用oraoledb.oracle提供程序来连接到Oracle数据库,并且很容易构建连接字符串:
Provider = OraOLEDB.Oracle; User Id = myId; Password = myPassword; Data Source = data.customer.com
并且一切都按预期工作,但目前我切换到ODP.Net以摆脱安装oracle客户端,我得到一个错误ORA-12154: TNS:could not resolve the connect identifier specified
,其中包含以下连接字符串:
Data Source = data.customer.com; User Id = myId; Password = myPassword
有人可以告诉我,我犯了错误吗?
答案 0 :(得分:3)
就个人而言,我宁愿不依赖于机器上定义的tnsnames.ora。使用更长的连接字符串(参见下面的示例),您可以部署您的程序而不考虑目标系统上可能不存在的tnsnames.ora。
使用不带tnsnames.ora的ODP.NET的示例:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));
User Id=myUsername;Password=myPassword;
请参阅also。
答案 1 :(得分:3)
托管ODP.NET与tnsnames.ora一起使用,但它需要一些额外的配置才能工作。这是你的问题。您正在尝试使用tnsnames.ora
中的名称,该名称仅在您的machine.config,Web.config或app中设置TNS_ADMIN
环境变量或配置部分时有效。配置。能够使用tnsnames.ora的另一个选择是非托管的ODP.NET驱动程序,在我看来这很难用。
尝试使用EZCONNECT名称,托管和非托管驱动程序都支持 ,而无需使用tnsnames.ora文件或任何其他配置。
答案 2 :(得分:0)
我最近在这条路上冒险,只是在尝试使用ODP.net运行网站时遇到32x / 64x问题。
这是我的工作连接字符串:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ip/server)(PORT=port)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=service_id)));User Id=user_id;Password=p_word"
编辑: Darn,@ ilekseev太快了..
答案 3 :(得分:0)
如果您使用Oracle安装程序安装ODP.NET,则将包含data.customer.com的TNSNAMES.ORA复制到您的{ODP.NET ORACLE HOME} / NETWORK / ADMIN目录中,它应该可以正常工作,因为安装程序设置了TNS_ADMIN machine.config中的变量,(对于Managed ODP.NET)。
如果您想完全没有TNSNAMES.ORA条目,也可以使用SQLNET EZ Config连接字符串语法。
例如: 数据源= MyHost:MyPort / MyOracleService;用户ID = myUsername;密码= myPassword;