System.Data.OracleClient需要Oracle客户端软件版本8.1.7或更高版本

时间:2011-10-20 06:57:37

标签: c# asp.net oracle oracle10g

我在PC上安装了Oracle客户端版本10g(注册表ORACLE_BASE-D:\ oracle \ product \ 10.2.0)。 我添加了以下参考资料。 System.Data.OracleClient的。

我收到上述错误。 以下是代码段。

public static OracleConnection getConnection() 
{

    try 
    {
        dataSource = new SqlDataSource();
        dataSource.ConnectionString = System.Configuration.ConfigurationManager.AppSettings.Get("conn");
        OracleConnection connection = new OracleConnection();
        if (dataSource == null) 
        {
            // Error during initialization of InitialContext or Datasource
            throw new Exception("###### Fatal Exception ###### - DataSource is not initialized.Pls check the stdout/logs.");
        } 
        else
        {
            connection.ConnectionString = dataSource.ConnectionString;
            connection.Open();
        }
        return connection;            
    }catch (Exception ex) 
    {
        throw ex;
    }  

}

请让我知道关注的范围和我失踪的地方。我是Oracle和Asp.Net组合的新手。

4 个答案:

答案 0 :(得分:3)

看起来您正在使用Microsoft oracle客户端。我建议您使用ODP.net驱动程序,因为它更可靠。 (我相信微软客户端也被弃用了?)

http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

安装ODP.net驱动程序,在项目中添加对Oracle.DataAccess的引用,你就可以了!示例代码(来自我的previous post):

using System;
using System.Data;
using Oracle.DataAccess.Client;

static class Program
{
    [STAThread]
    static void Main()
    {
        TestOracle();
    }

    private static void TestOracle()
    {
        string connString = 
            "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" + 
            "(HOST=servername)(PORT=‌​1521)))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+ 
            "User Id=username;Password=********;";
        using (OracleConnection conn = new OracleConnection(connString))
        {
            string sqlSelect = "SELECT * FROM TEST_TABLE";
            using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
            {
                var table = new DataTable();
                da.Fill(table);

                if (table.Rows.Count > 1) 
                    Console.WriteLine("Successfully read oracle.");
            }
        }
    }
}
编辑:之前我还遇到过“需要Oracle客户端软件版本8.1.7或更高版本”的错误。我是因为在我的计算机上安装Oracle客户端造成的。如果您使用Microsoft驱动程序,则可以尝试从计算机上卸载Oracle客户端。

答案 1 :(得分:2)

基本上在这种情况下, System.Data.OracleClient 需要访问一些不属于.Net的oracle dll。解决方案:

  • 安装Oracle客户端,并将Oracle客户端bin位置添加到Windows环境中的可变窗口 或者
  • 复制 oraociicus10.dll(Basic-Lite版本)或aociei10.dll(基本版), oci.dll,orannzsbb10.dll和oraocci10.dll从oracle客户端可安装文件夹到bin文件夹的应用程序,以便应用程序能够找到所需的dll

答案 2 :(得分:1)

“我在我的电脑上安装了Oracle客户端版本10g” “System.Data.OracleClient需要Oracle客户端软件版本8.1.7或更高版本”

您正在使用Microsoft Oracle Client,并且在.NET Framework 4.0中对System.Data.OracleClient中的类型进行了折旧并将被删除 来自.NET的未来版本 http://msdn.microsoft.com/en-us/library/77d8yct7.aspx

检查计算机上是否还有较旧的Oracle客户端(8或更低版本)。 PATH变量可能仍指向较旧的Oracle客户端bin目录。 如果你从Windows命令行运行'tnsping',如果你没有看到版本10,那么它仍然默认为旧版本。

在安装较新的Oracle客户端之前,首先卸载所有现有的oracle客户端始终是个好主意。 然后安装Oracle数据库服务器和您组织支持的最高版本的oracle客户端。

您可能想要尝试Oracle Client 11g R2并安装适用于.NET的Oracle数据提供程序 http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

如果您使用的是.NET Framework 4.0或更高版本,则在Visual Studio项目中添加对Oracle.DataAccess的引用时, 确保此dll是4.x.x.x,否则浏览到您的客户端位置并选择4.x.x.x dll

答案 3 :(得分:1)

仍需要在客户端计算机上安装Oracle客户端软件以允许连接到Oracle数据库。数据库用户是SQL * Net,它是Oracle数据库的Oracle连接层。 System.Data.OracleClient dll不提供此功能。

下载Oracle client software

编译代码时,还必须包含对DLL的引用。例如,如果要编译C#程序,则命令行应包括:

喜欢: - csc /r:System.Data.OracleClient.dll

MSDN