C# 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表
使用以下代码,我可以枚举在我的系统上注册的OLEDB提供程序C# 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表,c#,ms-office,oledb,C#,Ms Office,Oledb,使用以下代码,我可以枚举在我的系统上注册的OLEDB提供程序 static void DisplayData() { var reader = OleDbEnumerator.GetRootEnumerator(); var list = new List<String>(); while (reader.Read()) { for (var i = 0; i < reader.FieldCount; i++) { if (re
static void DisplayData() {
var reader = OleDbEnumerator.GetRootEnumerator();
var list = new List<String>();
while (reader.Read()) {
for (var i = 0; i < reader.FieldCount; i++) {
if (reader.GetName(i) == "SOURCES_NAME") {
list.Add(reader.GetValue(i).ToString());
}
}
Console.WriteLine("{0} = {1}", reader.GetName(0), reader.GetValue(0));
}
reader.Close();
}
static void DisplayData(){
var reader=OleDbEnumerator.GetRootEnumerator();
var list=新列表();
while(reader.Read()){
对于(变量i=0;i
它返回驱动程序列表(我们对访问驱动程序感兴趣),并附带一条警告
针对.net 4.5,它包含:
SOURCES_NAME=Microsoft.ACE.OLEDB.15.0
但是,当项目基于.net 4.0构建时,输出为:
SOURCES_NAME=Microsoft.ACE.OLEDB.12.0
我们正在测试的机器安装了32位Office 2013(其中安装了Microsoft.ACE.OLEDB.15.0)和64位版本的Access数据库驱动程序(其中安装了Microsoft.ACE.OLEDB.12.0)。我们正在运行的项目设置为AnyCPU,我们使用的是Windows 8.1
为什么枚举不总是返回相同的结果
如何获取系统上安装的所有提供商的列表?我想这样做的原因是,通常我想运行最新的驱动程序,但对于某些连接,我需要使用早期版本的驱动程序。(这是因为我有时需要升级旧的.mdb文件)因此,如果未安装旧版本,我希望通知我的用户
各种古怪:
如果我们根据.net 4.5.1创建控制台应用程序,然后将其更改为.net 4.0并运行,然后将其更改回.net 4.0,它将继续返回.net 4.0结果(Microsoft.ACE.OLEDB.12.0驱动程序)您在这里看到的可能是.NET 4.5中引入的名为AnyCPU 32位首选设置的新子类型的影响。此子类型是新项目的新默认类型。它的意思是:
- 如果进程在32位Windows系统上运行,则它将作为32位进程运行。IL编译为x86机器代码
- 如果进程在64位Windows系统上运行,则它将作为32位进程运行。IL编译为x86机器代码
- 如果进程在ARM Windows系统上运行,则它将作为32位进程运行。IL编译为ARM机器代码
请注意,只有在创建新的.NET4.5项目时,才能看到差异;如果您只是将.NET目标版本从4.0更改为4.5,则平台目标不会从AnyCPU更改为32位首选的AnyCPU。您好,我想知道是否可以使用此技术来判断安装的驱动程序是32位还是64位访问驱动程序?谢谢