win8 x64,c#.net2010,oracle10g,office2007,OracleConnection此错误“;ORA-12154:TNS:无法解析指定的连接标识符";?

win8 x64,c#.net2010,oracle10g,office2007,OracleConnection此错误“;ORA-12154:TNS:无法解析指定的连接标识符";?,c#,oracle10g,connection-string,add-in,C#,Oracle10g,Connection String,Add In,我在“Excel2007Addins”项目中有此代码 错误=:ORA-12154:TNS:无法解析指定的连接标识符 我在project windowsApplaction中也有相同的代码: private void Form1_Load(object sender, EventArgs e) { string constring = "data source=localhost;user id=fi_archivedb;Password=fi_archivedb";

我在“Excel2007Addins”项目中有此代码

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

我在project windowsApplaction中也有相同的代码:

   private void Form1_Load(object sender, EventArgs e)
    {
        string constring = "data source=localhost;user id=fi_archivedb;Password=fi_archivedb";
        OracleConnection con = new OracleConnection(constring);
        string sql= "select *from TBLFOLDERS"; 
        con.Open();
        OracleCommand cmd = new OracleCommand(sql, con);

        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
            MessageBox.Show(dr[0].ToString());
    }
在此项目“WindowsApplaction”中,代码正确无误

问题出在哪里


为什么项目“Excel 2007 Addins”中的代码没有指出TNS-xxxxx错误只是Oracle错误

您的连接字符串设置不正确。甲骨文在我认为任何一种网络协议上都有自己的一层。它因“透明网络基板”而被命名为“TNS”。使用TNS(也称为“Oracle SQL*Net”,也称为“Oracle Net”),在黑暗时代,您可以透明地将数据包从SNA路由到DECNet,再路由到IPX,再路由到基于IP的网络,而不需要知道任何有关它们的信息。目前,Oracle仅切换到基于IP的,但大多数用户仍然使用旧的TNS层

要配置它,请参见例如

此外,对于正确使用Unicode和使用网络文件轻松使用共享位置,还有一些建议,请参见的3.7.5.1.2

在您的情况下,由于它有时似乎有效,请检查您是否正在比较两个相同的安装,因此请使用Excel 32位和Windows 32位。或者两者都是64位。Oracle对于所需的位数有不同的DLL-s。以及不同的配置文件。如中所述,您可以在注册表中使用TNS_ADMIN跨Oracle SQL*Net的多个安装共享配置文件

还请注意,特别是对于使用VSTO的外接程序,获取同时安装到32位和64位Office环境中的外接程序以加载正确的DLL可能会更加复杂,而无需对版本进行硬编码并随附正确的Oracle DLL-s。还要记住使用ODP,而不是Microsoft变体。当我们在2009开始获得VSTO外接程序(为32位和64位Excel的INVITE控件,需要一些64位来处理完整的数据卷,请注意.NET数组在4中的限制,考虑4.5)以安装任何Oracle版本时,我们已经遇到了一些主要的问题。(例如,可能已经安装了32位10g或11g)与任何Office版本结合使用(为什么o为什么人们仍然运行32位…)。我无法与您分享解决方案。最终,我们转向了更小的数据卷(一次请求中小于4 GB)到我们自己的Web服务,它将客户端与服务器分离,并确保用户不需要安装500 MB的Oracle客户端软件。这可能也是一种可行的方法

请注意,使用Oracle SQL*Net还有其他选项,例如包含可用服务的其他目录,以及将以下连接字符串和路由信息放入.Net连接字符串中

请注意,您缺少“”和“from TBLFOLDERS”之间的空格,并且当您只需要几个字段时不必要地使用“”可能会导致性能问题(例如,由于索引即使包含所有必需的字段也未被选择)和网络带宽问题(在每次往返中多拖动几KB左右会快速增加所需的带宽)

定义服务“XYZ.ACME.COM”或“XYZ”的tnsnames配置文件的一个简单示例:

附带的sqlnet.ora:

NAMES.DIRECTORY_PATH= (TNSNAMES)
NAMES.DEFAULT_DOMAIN=ACME.COM
DEFAULT_SDU_SIZE=65536
RECV_BUF_SIZE=1048576
SEND_BUF_SIZE=1048576

这解决了您的问题吗?

您已经问过这是提供的答案不够吗?是的,两天前提供的答案不够这个问题,我正在尝试解决,但没有效果,我希望您能帮助我
localhost
可能对sql server有好处。您需要为oracle设置tns_名称文件。然后使用
tnspingcommand要测试您的连接,我只想对连接在prpject“WindowsApplaction”中正常工作而在项目“Excel2007加载项”中不工作的问题进行一种解释,虽然我使用了相同的代码和相同的机器以及相同版本的Oracle和相同版本的C-Sharp三种情况:1-当set-Platform target=x86时,此加载项加载在office applaction中,但没有连接的数据库。2-当set-Platform target=x64时,此加载项未加载在office applactionHi中,我缺少第三种情况;什么情况您正在运行Excel的版本?32位还是64位?请注意,更改Office项目的x32/x64设置不是一个好主意;您应该反映您的Office安装或允许CLR选择x32/x64并在您自己的代码中加载正确的Oracle程序集。运行32位时,请确保您具有32位Oracle配置ed如上所述。作为快捷方式:使用注册表HKLM\SOFTWARE\Oracle\Key*\TNS_ADMIN指向tnsnames.ora。是否遵循其他说明?如何查找Excel版本?确定使用的Excel版本的方法之一是:启动Excel,文件功能区,单击“帮助”。右侧显示:“产品已激活”、。。。,“关于Microsoft Excel”,版本:14.0.7106.5003(64位)。因此,我正在运行Office 2010(v14)的64位Excel。版本:14.0.4734.1000(32位)
# Include other file, new releases can nest them.
ifile=tnsnames-invantive.ora
# Direct in tnsnames.ora:
XYZ.ACME.COM=
( description =
  ( address_list =
    ( address = (protocol = tcp)(host = 192.1.1.1)(port = 1521)
    )
  )
  ( connect_data =
    (sid=XYZ)
    (global_name = XYZ.ACME.COM)
  )
)
NAMES.DIRECTORY_PATH= (TNSNAMES)
NAMES.DEFAULT_DOMAIN=ACME.COM
DEFAULT_SDU_SIZE=65536
RECV_BUF_SIZE=1048576
SEND_BUF_SIZE=1048576