连接到Oracle数据库。

9

我正在尝试连接到一个Oracle数据库,但当代码执行以下行时:

con = new OracleConnection(oradb);

它提示以下错误:"程序无法启动,因为您的计算机缺少oraons.dll文件。请尝试重新安装程序以解决此问题。" 我已从以下网站http://www.oracle.com/technetwork/topics/dotnet/index-085163.html下载并安装了ODP.NET,也已经引用了Oracle.DataAccess。我还检查了安装的文件夹,发现oraons dll位于其中。这是代码:
class OracleDatabase
{
    OracleConnection con;
    public void ConnectToOracleDb()
    {
        string oradb = getConnectionString("host", 1521, "sid", "user", "pass");

        try
        {
            con = new OracleConnection(oradb);
            con.Open();
            Console.WriteLine("Connected to Oracle" + con.ServerVersion);
        }
        catch
        {
            Console.WriteLine("Could not connect to FLX");
        }

    }

    private static string getConnectionString(string databaseIP, int databasePort, string databaseSID, string databaseUN, string databasePW)
    {
        return string.Format(
            "Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = {0})(PORT = {1}))(CONNECT_DATA =(SID = {2})));" +
            "Persist Security Info=True;User ID={3};Password={4}",
            databaseIP, databasePort, databaseSID, databaseUN, databasePW
        );
    }
}

为什么我无法连接?有什么建议吗?


1
如果您使用Oracle xcopy(看起来是这样)安装ODP.NET驱动程序,请检查驱动程序目录是否已添加到Windows系统PATH中。在Oracle xcopy的情况下,您必须手动执行此操作。 - Nick Krasnov
刚刚检查过了,@NicholasKrasnov已经添加了。 - kknaguib
你安装了Oracle客户端软件吗? - steve
我在win server 2008上使用非托管的oracle时遇到了同样的问题,但在win server 2008 R2上却可以正常工作。无论哪种情况,我的环境变量路径中都有正确的oracle home路径。 - max
3个回答

7

PATH设置不是必要的。我通过将oraons.dll的副本复制到ORACLE_HOME\bin文件夹中解决了相同的问题,之后安装程序就可以正常运行。

通过安装程序和xcopy部署方式安装Oracle之间存在差异,我不知道为什么。两种安装方法都具有相同的注册表设置:

HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath 

DllPath指向ORACLE_HOMEBIN文件夹。这意味着设置PATHORACLE_HOMEBIN文件夹是无效的。将客户端的PATH添加到ORACLE_HOME是不必要的,只需要将oraons.dll复制到BIN即可。


5
我最终引用了 ManagedDataAccess.Client 而不是 Data.Access.Client,这样就可以解决问题了。

1
问题出在路径上。选择托管数据访问是耍小聪明了 :) - Stephen Patten

4
我在我的测试项目中遇到了这个错误。问题是我从一个旧的PATH命令行打开了Visual Studio。重新打开一切后,它起作用了。
检查你的代码中的PATH,并确保oracle文件夹在PATH中。

1
谢谢。今天遇到了这个问题。我从Windows菜单开始而不是使用Slick Run,这解决了问题。 - quimbo
1
实际上,我是在 VS 运行时安装了驱动程序。重新打开 VS 有所帮助,谢谢! - Bronek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接