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

本文关键字:oracle 数据库 连接 何使用 ODAC | 更新日期: 2023-09-27 18:32:58

我正在使用此代码,但在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();
        }

    }

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

请浏览此链接

Oracle Data Provider for .NET 入门(C# 版本(

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/GettingStartedNETVersion/GettingStartedNETVersion.htm

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

例如:

打开预言机连接时,连接对象为空

我添加了尝试捕获块,它返回ORA12154 - TNS 无法 被解决。经过一番研究,我在tnsnames.ora中添加了一个SID 文件在我的 .NET Oracle 主路径中的 ODP 中,它有效

另请参阅 Oracle 网络服务疑难解答,以解决来自 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有效,但以下"缺点"。Open((" 失败。 这意味着 .Net 正在创建 C# 对象,但当您尝试使用它时,Oracle/TNS 会失败。

其他建议:

  • 重读

    打开预言机连接时,连接对象为 null。

    阅读所有建议,包括有关"连接字符串中的数据源"的建议。

  • 专注于连接字符串。 如果可能的话,在 OracleConnection(( 构造函数中指定连接字符串不会有什么坏处。 这是另一个链接:

    ODP.NET 连接异常

  • 如果除了 C#/.Net 程序之外,您还可以验证从 PC 与其他 Oracle 客户端的连接,那就太好了。 使用正确的用户名/密码验证你是否正在与正确的 TNS 主机和服务通信。 例如,也许你有SQLDeveloper或sqlplus。

  • 最后,重新阅读 TNS 故障排除链接:

    https://docs.oracle.com/cd/E11882_01/network.112/e41945/trouble.htm#NETAG016

对于我来说,同样的错误是简单地从"普通"Oracle DataAccess 库切换到"托管"版本。这是一个非常容易做出的改变——

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

    using Oracle.ManagedDataAccess.Client;
    using Oracle.ManagedDataAccess.Types;
    
  3. Oracle.ManagedDataAccess.dll文件包含在您的 exe 中