使用odp.net和c#中的OCI连接到Oracle

本文关键字:OCI 连接 Oracle 中的 odp net 使用 | 更新日期: 2023-09-27 17:50:08

我一直在阅读如何从我的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工作?

使用odp.net和c#中的OCI连接到Oracle

能够使用ODP。如果没有安装完整的客户端,您需要使用Oracle即时客户端包(您不能从完整的客户端复制库):

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

    private const string CONNECTION_STRING="User Id=hr;Password=hr;"+
       +"Data Source=127.0.0.1:1521/XE;Connect Timeout=15;";
    

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

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

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

看起来您可以重新分发instance-client

阅读Oracle的ODAC安装说明。本文还讨论了常见的设置问题。

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