C# 这是错误ORA-12154:TNS:无法解析指定的连接标识符?

C# 这是错误ORA-12154:TNS:无法解析指定的连接标识符?,c#,oracle,excel-addins,C#,Oracle,Excel Addins,我有以下代码: 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.Exe

我有以下代码:

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加载项中出现以下错误:

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

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

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

Visual Studio,打开“视图”菜单+服务器资源管理器

右键单击数据连接+添加连接+选择Oracle数据库
服务器名称:localhost或我的计算机名称,设置用户名和密码并单击测试连接,测试不成功。

数据库必须有一个名称示例DB1,请尝试此名称:

OracleConnection con = new OracleConnection("data source=DB1;user id=fastecit;password=fastecit"); 
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"); 
如果未定义TNS,您也可以尝试以下方法:

OracleConnection con = new OracleConnection("data source=DB1;user id=fastecit;password=fastecit"); 
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"); 
ORA-12154:TNS:无法解析指定的连接标识符

如果未定义TNS,您也可以尝试以下方法:

OracleConnection con = new OracleConnection("data source=DB1;user id=fastecit;password=fastecit"); 
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"); 
如果您使用的是C.net 2010或其他版本的VS和oracle 10g express edition或更低版本,并且您创建的连接字符串如下所示:

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:无法解析指定的连接标识符,然后首先必须重新启动系统并运行项目

如果您的windows为64位,则需要安装oracle 11g 32位;如果您安装了11g 64位,则需要使用oracle Developer Tools for Visual Studio 11.2.0.1.2或更高版本从OTN安装oracle 11g oracle数据访问组件ODAC,并在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,然后运行项目。。。。
注意:-系统重新启动是解决此类错误所必需的……

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

tnsping数据源

这将给出如下的响应

C:>tnsping*******

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

版权c 1997年,2014年,甲骨文。版权所有

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

用于****解析别名 正在尝试联系描述=地址\u列表=地址=协议=TCHOST=端口=连接\u数据=服务器=服务\u名称=故障转移\u模式=类型=方法=重试次数=延迟=** OK****毫秒

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

数据源=描述=地址\列表=地址=协议=TCHOST=端口=连接\数据=服务器=服务\名称=故障转移\模式=类型=方法=重试次数=延迟=;用户Id=;密码=**


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

您不需要在某个位置指定数据库名称吗?是的,我无法指定在Project1 winForms和同一台计算机上使用相同代码的某个数据库,但它在另一个project Excel 2007 addinsIs Project1或project2 64位中不起作用?PATH环境变量中是否有多个Oracle Home?project1 winForms Platform=x86,output type=WindoseApplaciton.Project2 Platform=active any cpu,output type Class Library我没有DB1,我使用了案例2错误ORA-06413:连接未打开C:\oraclexe\app\Oracle\product\10.2.0\server\NETWORK\ADMIN\tnsnames.ORA,XE=DESCRIPTION=ADDRESS=PROTOCOL=TCPHOST=pcmaxPORT=1521 CONNECT\u DATA=SERVER=DEDICATED SERVICE\u NAME=XE我希望您能帮助我@wernfried当它是这样的:OracleConnection con=new OracleConnectiondata source=XE;用户id=fastecit;密码=fastecit;ORA-12514:TNS:侦听器目前不知道连接描述符中请求的服务是我现在得到的错误。谢谢。。直接使用连接字符串中的描述可以解决此问题…您必须重新启动什么?客户机还是服务器?通常你只需要重新启动一些特定的服务就可以解决重新启动的问题。这很有效,你救了我一天,谢谢!如果没有,请尝试将主机dns名称更改为IP地址。重新启动客户端计算机使其适合我。在此之前,我甚至无法从ODBC工具测试连接。谢谢