【问题标题】:win8 x64 ,c#.net2010 ,oracle10g , office2007 , OracleConnection this Error "ORA-12154: TNS:could not resolve the connect identifier specified"?win8 x64 ,c#.net2010 ,oracle10g , office2007 , OracleConnection 这个错误“ORA-12154: TNS:could not resolve the connect identifier specified”?
【发布时间】:2013-12-03 23:18:39
【问题描述】:

我在项目“Excel 2007 Addins”中有这段代码

 private void ThisAddIn_Startup(object sender, System.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());
    }

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

我在项目 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”?

【问题讨论】:

  • 你已经问过这个stackoverflow.com/questions/20361325/…是不是提供的答案不够?
  • 是的,提供的答案不充分
  • 前两天这个问题,我正在尝试解决,但无济于事,希望您能帮助我
  • localhost 可能对 sql server 有好处。你需要为 oracle 设置 tns_names 文件。然后在cmd中使用tnsping命令来测试你的连通性
  • 是的,我只想要对问题的一种解释 为什么连接在 prpject“WindowsApplaction”中正常工作,但在项目“Excel 2007 Addins”中不起作用,尽管我使用相同的代码和相同的机器以及相同版本的 Oracle 和相同版本的 C-Sharp

标签: c# oracle10g connection-string add-in


【解决方案1】:

TNS-xxxxx 错误指出它只是一个 Oracle 错误。

您的连接字符串设置不正确。 Oracle 在我认为曾经发明过的任何网络协议之上都有自己的层。它被命名为“透明网络基板”的“TNS”。使用 TNS(也称为“Oracle SQL*Net”,也称为“Oracle Net”),您可以在黑暗时代透明地将数据包从 SNA 路由到 DECNet 再到 IPX 再到基于 IP 的网络,然后再返回,而对它们一无所知。目前,Oracle 已切换为仅基于 IP,但大多数用户仍使用旧的 TNS 层。

要对其进行配置,请参阅Oracle Net manual

此外,还有一些建议允许正确使用 Unicode 和使用网络文件轻松使用共享位置,请参阅 configuration manual of Invantive product 的 3.7.5.1.2

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

还请注意,特别是对于使用 VSTO 的加载项,获取安装到 32 位和 64 位 Office 环境中的加载项以始终加载正确的 DLL 而不对版本进行硬编码和传送正确的 Oracle DLL 可能会更加复杂-s 与它。还要记住使用 ODP,而不是 Microsoft 变体。当我们在 2009 年开始获得 VSTO 加载项时,我们最初遇到了重大问题(32 位和 64 位 Excel 的 Invantive Control,一些工作表需要 64 位来处理全部数据量,请注意 .NET 数组的限制在 4.0 中,考虑 4.5) 与任何已安装的 Oracle 版本一起运行(例如,可能会遇到已安装的 32 位 10g 或 11g)与任何 Office 版本(为什么人们仍然运行 32 位......)。我无法与您分享的解决方案。最终,我们已将较小的数据量(一次请求小于 4 GB)切换到我们自己的 Web 服务,该服务将客户端与服务器分离,并确保用户无需安装 500 MB 的 Oracle 客户端软件。这对您来说可能也是一种可行的方法。

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

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

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

# 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)
  )
)

附带sqlnet.ora:

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

这是否解决了您的问题?

【讨论】:

  • 三种情况:1-当设置平台目标=x86时,这个插件是在office applaction中加载的,但没有连接数据库。 2- 当设置平台目标 =x64 时,此插件未在 office applaction 中加载
  • 嗨,我错过了第三个;您正在运行什么版本的 Excel? 32 位还是 64 位?请注意,更改 Office 项目的 x32/x64 设置不是一个好主意;您应该反映您的 Office 安装或允许 CLR 选择 x32/x64 并在您自己的代码中加载正确的 Oracle 程序集。运行 32 位时,请确保您已按上述方式配置了 32 位 Oracle。作为快捷方式:使用注册表 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 位)
猜你喜欢
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多