2

我是 VS 和数据库的新手。我正在进行的项目是尝试将旧软件从 VB6 现代化到 VS 2010 C#。这需要搜索外部数据库。所以我试图通过使用 OracleConnection() 连接到该数据库。我在 Windows 7 Enterprise 上使用 Visual Studio 2010 Express。我下载了 Oracle 数据访问组件(ODAC 11.2 Release 5,它是最新的 32 位)。TNSNAMES.ora 文件和连接字符串都已正确解决。

现在我可以使用 Sql*Plus 连接到数据库。旧的 VB6 版本软件在从数据库中检索信息方面也能很好地工作(如果我没有 ODAC 并正确设置了 tnsnames.ora,它将无法工作)。但是,我的 VS C# 没有。它无法打开连接。错误消息是“ORA-12545:连接失败,因为目标主机或对象不存在”。如果我将 DB 主机地址更改为 IP 地址,它会给我“ORA-12560: TNS:protocol adapter error”。

我认为 VS 2010 Express IDE 存在问题。有人对此有任何想法吗?我尝试重新安装 ODAC,但没有帮助。提前非常感谢。

我的代码与此处使用 c# 2010 express 连接到 oracle XE完全相同

更新——已解决

我终于想通了这个问题。就我而言,这在某种程度上与全局程序集缓存中的 DLL 有关。我发现我的项目正在针对为 .NET 2.0 设计的奇怪 ​​ODAC 进行编译。我试图重定向 OracleDBAccess 的引用,但没有帮助。然后我开始了一个新项目,设置了引用权限,然后将所有代码复制到那里。它最终成功了。

4

1 回答 1

0

不同之处在于 SqlPlus 使用与 .Net 不同的数据提供程序进行连接。我有一篇博客文章讨论了 .net 和 oracle 协同工作所需的最低要求。要考虑的要点是确保您拥有正确的数据提供程序(32 / 64 位),并且您的 oracle bin 文件夹位于操作系统的路径语句中。

不同之处在于 SqlPlus 使用与 .Net 不同的数据提供程序进行连接。我有一篇关于基本要求的博客文章。

博文链接

- 来自帖子的文本

从 Oracle 下载最新的 Oracle 11g2 客户端软件。

注 – 如果使用 64 位操作系统,请务必确定所需的位级别。如果您的应用程序专门编译为 32 位,那么您必须使用 32 位 oracle 客户端。如果它们被编译为本地运行——那么您必须使用 64 位 oracle 客户端软件。

  1. 将 zip 文件解压缩到一个目录

  2. 打开文件夹并以管理员身份启动 setup.exe 文件

  3. 在第 1 步(共 8 步)中选择您想要的安装类型的自定义选项,然后单击下一步

  4. 现在选择 Oracle Data Provider for .NET 选项并单击下一步

  5. 使用默认选项完成剩余步骤

  6. 完成后 - 导航到以下文件夹

    【安装路径】\product\11.2.0\client_1\network

  7. 创建一个名为 admin 的新文件夹

  8. 将现有的 sqlnet.ora 和 tnsnames.ora 文件复制到 admin 目录

  9. 使用 .net 应用程序测试安装,或者您可以使用此处博客中提供的 OracleConnectionTesting 实用程序之一

适用于 Oracle 的 .Net 测试实用程序

于 2013-06-25T03:10:22.707 回答