上的所有訪問ACE.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();
}
它返回驅動程序列表中(我們感興趣的是上註冊的OLEDB提供商訪問驅動程序),有一點需要注意..
針對.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),我們安裝了Access數據庫驅動程序(Microsoft.ACE.OLEDB.12.0)的64位版本。我們正在運行的項目被設置爲AnyCPU,我們正在使用Windows 8.1。
爲什麼枚舉不總是返回相同的結果?
如何獲得我的系統上安裝的所有提供程序的列表?我想要的原因是通常我想運行最新的驅動程序,但對於某些連接,我需要使用驅動程序的早期版本。 (這是因爲我有時需要升級舊的.mdb文件)所以如果沒有安裝舊版本,我想通知我的用戶。
其他怪事:
如果我們創建針對.NET 4.5.1控制檯應用程序,然後將其更改爲.NET 4.0和運行然後將其更改回.NET 4.0繼續返回.NET 4.0結果(Microsoft.ACE.OLEDB.12.0司機)