c# – 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表

c# – 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表,第1张

概述使用下面的代码我可以枚举在我的系统上注册的OLEDB提供商 static void DisplayData() { var reader = OleDbEnumerator.GetRootEnumerator(); var list = new List<String>(); while (reader.Read()) { for (var i = 0; i < r 使用下面的代码我可以枚举在我的系统上注册的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 (reader.Getname(i) == "SOURCES_name") {            List.Add(reader.GetValue(i).ToString());         }      }      Console.Writeline("{0} = {1}",reader.Getname(0),reader.GetValue(0));   }   reader.Close();}

它返回驱动程序列表(我们对访问驱动程序感兴趣)与一个警告..

反对.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位优化的 AnyCPU设置的新子类型的效果.此子类型是新项目的新默认值.这意味着:

>如果进程在32位windows系统上运行,则它将作为32位进程运行. IL编译为x86机器代码.
>如果进程在64位windows系统上运行,则它运行为32位进程. IL编译为x86机器代码.
>如果进程在ARM windows系统上运行,则它运行为32位进程. IL编译为ARM机器代码.

这个新的默认背后的原因在这篇博文中有很好的解释:

07001@H_502_37@

那你为什么看到你的情况呢?因此,如果您定位.NET 4.0,您的应用程序将在64位进程中执行(因为Anycpu平台目标).因此,您将看到驱动程序的64位版本.

如果您创建一个面向.NET 4.5的新项目,则应用程序在32位进程中运行(使用默认项目设置),您将看到驱动程序的32位版本.

请注意,只有创建新的.NET 4.5项目时,才会看到差异;如果您将.NET目标版本从4.0更改为4.5,则平台目标不会从Anycpu更改为32位优先选择的Anycpu.

总结

以上是内存溢出为你收集整理的c# – 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表全部内容,希望文章能够帮你解决c# – 获取系统上安装的所有Access ACE.OLEDB驱动程序的列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存