2

我一直在阅读有关如何从我的 C# win 应用程序连接到我的 oracle 数据库的信息,但我一直在“碰壁”。我决定使用 odp.net 和 OCI,这样客户端计算机不需要安装客户端,但我无法让它工作。

我有一个小型测试应用程序,下面显示的代码,在我的解决方案中,我从 oracle OCI 添加了以下 dll:oci.dll、orannzsbb11.dll 和 oraociicus11.dll。它们都与最终的 .exe 文件放在一起。

测试代码:

private static string CONNECTION_STRING =
                  "User Id=hr;Password=hr;Data Source=(DESCRIPTION=" +
                  "(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))" +
                  "(CONNECT_DATA=(SID=XE)));Connect Timeout=15;";

        static void Main(string[] args)
        {
            try
            {
                using (var conn = new OracleConnection(CONNECTION_STRING))
                {
                    conn.Open();
                    Console.WriteLine("Connection is: {0}", conn.State.ToString());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

问题已经出现在 using(...) 语句中,程序停止工作,我没有得到任何响应。我需要做什么才能让 OCI 工作?

4

3 回答 3

1

为了能够在不安装完整客户端的情况下使用 ODP.NET,您需要使用Oracle Instant Client包(您不能只从完整的客户端复制库):

  • 在此处查看要求的说明。
  • 从 Oracle v10 开始,我强烈建议使用EZCONNECT来简化您的连接字符串。这个怎么样:

    private const string CONNECTION_STRING="User Id=hr;Password=hr;"+
       +"Data Source=127.0.0.1:1521/XE;Connect Timeout=15;";
    
于 2011-04-13T11:43:56.977 回答
0

通常在使用 OCI 或一般的 Oracle 数据库产品时,应定义 ORACLE_HOME 环境变量并指向您的 oracle 安装。在库旁边,Oracle 确实使用了一些其他支持文件,它正在 ORACLE_HOME 中搜索它们。通常,LD_LIBRARY_PATH 定义为 ORACLE_HOME/lib。尝试使用Instant Client,这很可能比手动挑选几个库更好。一篇关于如何让它工作的好文章在这里:在 win32 上安装 Oracle instantclient basic 和 instantclient sqlplus你可以省略关于 sqlplus 的部分。

从 otn 上的实例客户端页面:

Instant Client 下载 请注意,Instant Client 是根据 Instant Client 的单独 OTN 开发和分发许可证提供的,该许可证允许大多数被许可人免费下载、重新分发和部署在生产环境中。如有必要,请咨询许可证和您的法律部门以获得澄清。有关 Instant Client 的更多信息,请参阅 Instant Client 官方网站。

看起来您可以重新分发实例客户端。

于 2011-04-13T10:18:47.993 回答
0

阅读此处的 Oracle 为 ODAC 提供的安装说明。这也讨论了常见的设置问题。

您还需要在解决方案中包含对 Oracle.DataAccess 的引用和“使用 Oracle.DataAccess.Client;” 对于您的连接,您可能希望使用可以通过 tnsnames 文件解析的 Oracle SID(尝试从 cmd 提示符进行 tnsping)。

于 2011-04-13T11:16:59.637 回答