无法在C#中连接到Oracle

时间:2011-08-16 20:44:37

标签: c# oracle

我正在尝试使用32位控制台应用程序连接到Oracle。我得到以下的erorr。代码(主机,用户名和密码更改除外)如下所示。这是一个简单的双功能项目。

任何帮助将不胜感激。

我在Visual Studion 2010 Premium和Oracle 10g中使用C#。我可以使用Oracle SQL Developer通过连接字符串中设置的信息连接到数据库。


---------------的ToString -------------------------- --Oracle.DataAccess.Client.OracleException at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,String procedure)    在Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,Oracle 连接conn,IntPtr opsErrCtx,Object src)    在Oracle.DataAccess.Client.OracleConnection.Open()    在ConsoleApplication1.Program.GetConnection()的c:\ users \ maholt \ documents \ visual studio 2010 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs:第61行

---------------消息---------------------------


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;

namespace ConsoleApplication1
{
    class Program
    {
        static OracleConnection conn;

        static void Main(string[] args)
        {
            OracleConnection connC = GetConnection();

            conn = connC;
            simpleQuery();
            Console.WriteLine("DONE");
        }

        public static void simpleQuery()
        {
            OracleCommand cmd = new OracleCommand("select count(*) as total from console.client");

            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;

            try
            {
                cmd.Connection.Open();
                OracleDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(Convert.ToString(reader["total"]));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                cmd.Dispose();
            }
        }

        public static OracleConnection GetConnection()
        {
            Oracle.DataAccess.Client.OracleConnection rtn = null;
            try
            {
                string connstr = "Data Source=//10.10.10.10:1521/PRD2_OLTP;User Id=user; Password=pass;";

                rtn = new Oracle.DataAccess.Client.OracleConnection(connstr);

                if (rtn.State != System.Data.ConnectionState.Open)
                {
                    rtn.Open();
                }
            }
            catch (Exception ee)
            {
                Console.WriteLine("-------------------------------------------------");
                Console.WriteLine("---------------ToString--------------------------");
                Console.WriteLine("--" + ee.ToString());
                Console.WriteLine("---------------Message---------------------------");
                Console.WriteLine("--" + ee.Message);
                Console.WriteLine("-------------------------------------------------");
            }

            return (rtn);
        }

    }
}

2 个答案:

答案 0 :(得分:1)

SQL Developer有效地使用了JDBC连接...因此它与.NET中的情况无法真正比​​较: - (

关于Oracle与.NET版本的兼容性 - 我发现这个问题很有问题。因为客户端根本没有根据Oracle路线图更新的选项...

经过研究,我转而使用Devart components - 支持从.NET 7.3到.NET 2中的11gR2以及32位和64位的所有内容,并提供“直接模式选项”,这意味着如果需要我可以在没有安装任何Oracle客户端的情况下运行我的应用程序...没有附属,只是一个快乐的客户......

答案 1 :(得分:0)

首先 - Oracle不支持带有.net 4.0的10g。您必须使用11.2.0.2或更高版本才能符合Oracle支持的版本。

第二 - 问题是您可能没有正确安装ODP.Net。这可能意味着它未安装,它已安装到第二个实例,或者在安装期间无法复制或更多文件。

我有一些关于这些项目的博客文章以及我编写的一些连接测试应用程序的链接。随意使用它们。

https://tsells.wordpress.com/category/oracle/