如何使用ODAC c#连接到oracle数据库

时间:2016-02-02 04:47:32

标签: c# oracle odac

我正在使用此代码,但收到的错误是“对象引用未设置为对象的实例”。在con.open()?我做错了什么?

我已经下载并安装了ODAC组件版本10,11,12,但是在最新版本失败的情况下尝试了每个版本,但仍然是同样的错误

using Oracle.DataAccess.Client;


namespace WindowsFormsApplication1
{
    class OraTest
    {

        public OracleConnection con = new OracleConnection();
        public void Connect()
        {
            con.ConnectionString = "Data Source=(DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST =myip) (PORT = myport))(CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME = mydb)));User ID=myid;Password=mypass;";

            con.Open(); //error here

        }

        public void Close()
        {
            con.Close();
            con.Dispose();
        }


    }

3 个答案:

答案 0 :(得分:2)

如果在Connect()中添加try / catch块,您将能够捕获错误。

例如:

  

When opening an oracle connection, connection object is null

     

我添加了try catch块,它返回了ORA12154 - TNS无法   得到解决。经过一些研究,我在我的tnsnames.ora中添加了一个SID   在我的ODP for .NET Oracle主路径中的文件,它工作

另请参阅Troubleshooting Oracle Net Services以解决Oracle客户端可能出现的连接问题(例如C#程序)。

但您的第一步绝对是确定Oracle级错误(例如,ORA-12543(无法连接到服务器主机)或TNS-12514(找不到服务名称)

MSDN: OracleException Class

public void ShowOracleException() 
{
   OracleConnection myConnection =
      new OracleConnection("Data Source=Oracle8i;Integrated Security=yes");

   try 
   {
      myConnection.Open();
   }
   catch (OracleException e) 
   {
     string errorMessage = "Code: " + e.Code + "\n" +
                           "Message: " + e.Message;

     System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
     log.Source = "My Application";
     log.WriteEntry(errorMessage);
     Console.WriteLine("An exception occurred. Please contact your system administrator.");
   }
}

con.ConnectionString = xyz工作很重要,但是以下`con.Open()'失败。这意味着.Net正在创建C#对象,但是当您尝试使用它时Oracle / TNS失败。

其他建议:

答案 1 :(得分:2)

答案 2 :(得分:0)

对我来说,同样的错误对我来说只是简单地从'普通'Oracle DataAccess库切换到'托管'版本。 这是一个非常容易的变化 -

  1. 将c#项目中的参考添加到Oracle.ManagedDataAccess
  2. 使用以下内容替换Oracle客户端代码顶部的现有use语句:

    using Oracle.ManagedDataAccess.Client;
    using Oracle.ManagedDataAccess.Types;
    
  3. 在您的exe

  4. 中加入Oracle.ManagedDataAccess.dll文件