我有一个C#应用程序,它使用OleDb 12.0驱动程序连接到MS Access数据库。如果未安装OleDb 12.0驱动程序,则应用程序将抛出一个无法解释的异常。
public static class Program
{
private static Mutex mutex = null;
[STAThread]
static void Main()
{
try
{
InMemoryValues.CorrectnessRepetition = 15;
InMemoryValues.MultipleChoiceCount = 6;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
... ...
... ...
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new CollectionForm());
}
}
我想让用户知道没有驱动程序的具体问题。我不想对信息进行硬编码。
我该怎么做?
相关源代码
public static class InMemoryValues
{
private static ApplicationData _appData = null;
public static int CorrectnessRepetition { get; set; }
public static int MultipleChoiceCount { get; set; }
static InMemoryValues()
{
_appData = ApplicationDataBLLL.Get();
if (_appData == null)
{
_appData = new ApplicationData();
}
}
public static ApplicationData ApplicationData
{
set
{
_appData = value;
}
get
{
return _appData;
}
}
public static void Save()
{
ApplicationDataBLLL.Save(_appData);
}
}
答案 0 :(得分:0)
使用OleDbEnumerator.GetElements()
,您可以获得DataTable
,其中包含所有可见OLE DB提供程序的列表。
返回数据表的第一列是SOURCES_NAME
,它是本机OLEDB数据源或枚举器的不变名称。
因此,您可以使用以下代码查明是否已安装Microsoft.ACE.OLEDB.12.0
并且对执行进程可见:
var oledb12Installed = new System.Data.OleDb.OleDbEnumerator()
.GetElements().AsEnumerable()
.Any(x => x.Field<string>("SOURCES_NAME") ==
"Microsoft.ACE.OLEDB.12.0");
请注意,如果您在安装Microsoft.ACE.OLEDB.12.0
的X64版本时编译X86应用程序,则上面的代码将返回false,这意味着您的应用程序无法使用Microsoft.ACE.OLEDB.12.0
。