检查Oracle.DataAccess是否存在

时间:2011-12-16 14:50:49

标签: c# .net winforms oracle oracle11g

我想检查是否安装了正确版本的Oracle驱动程序,并且可以在应用程序运行之前找到它,这样我就可以显示错误消息并正常失败。这是一个C#windows窗体应用程序。

当我在没有正确版本的Oracle的计算机上运行应用程序时,我收到以下消息并且应用程序处于挂起状态:

Could not load file or assembly 'Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.

如何可靠地检查此组件是否可用?

2 个答案:

答案 0 :(得分:0)

除了您自己的答案之外,您还可以使用AssemblyResolve事件以一般方式(针对所有程序集加载问题)执行此操作。这是一个例子:

AppDomain.CurrentDomain.AssemblyResolve += (sender, prms) => {
    Console.WriteLine("Could not load assembly \"{0}\".", prms.Name);
    Console.ReadLine();
    Environment.Exit(1);

    return null;
};

Assembly.Load("this asembly does not exist");

答案 1 :(得分:0)

您可以使用System.Data.Common.DbProviderFactories来实现相同的功能。 下面的示例代码可以为您检查。

    private bool checkSpecifiedProviderExists()
    {
        var connectionStringSettings = ConfigurationManager.ConnectionStrings["YourConnectionString"];  
        var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);    

        try
        {
            var dbConnection = factory.CreateConnection();
            if(dbConnection !=null) return true;
                return false;
        }
        catch
        {
                return false;
        }
    }