Obtenir une liste de tous les Accès ACE.OLEDB les pilotes installés sur le système
En utilisant le code suivant je peux énumérer les fournisseurs OLEDB enregistré sur mon système
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();
}
Elle renvoie la liste des pilotes (nous sommes intéressés par les pilotes d'Accès) avec une mise en garde..
Contre .net 4.5 il contient:
SOURCES_NAME = Microsoft.ACE.OLEDB.15.0
mais quand le projet est construit contre .net 4.0 la sortie est:
SOURCES_NAME = Microsoft.ACE.OLEDB.12.0
la machine, nous avons sont à l'essai sur 32 bits d'Office 2013 est installé (qui a le Microsoft.ACE.OLEDB.15.0) et nous avons installé la version 64 bits de la base de données Access driver (qui a Microsoft.ACE.OLEDB.12.0). Le projet que nous sommes en cours d'exécution est fixé à AnyCPU, nous sommes à l'aide de Windows 8.1.
Pourquoi ne pas l'énumération toujours les mêmes résultats?
Comment puis-je obtenir une liste de tous les fournisseurs installés sur mon système? La raison pour laquelle je veux, c'est que généralement je veux courir contre le pilote le plus récent, mais pour certaines connexions j'ai besoin d'utiliser une version antérieure du pilote. (c'est parce que j'ai parfois besoin de faire une mise à niveau de vieux .les fichiers mdb), Donc si l'ancienne version n'est pas installé je tiens à informer mes utilisateurs.
Divers étrangeté:
Si nous créer une application de console contre .net 4.5.1 alors la changer .net 4.0 et l'exécuter ensuite le changer en arrière .net 4.0, il continue à renvoyer l' .net 4.0 résultats (Microsoft.ACE.OLEDB.12.0 pilote)
OriginalL'auteur Xiaosu | 2014-02-06
Vous devez vous connecter pour publier un commentaire.
Ce que vous voyez ici, c'est probablement l'effet d'un nouveau sous-type de l' AnyCPU paramètre appelé AnyCPU 32 bits préféré qui a été introduit dans .NET 4.5. Ce sous-type est la nouvelle valeur par défaut pour les nouveaux projets. Cela signifie que le suivant:
Le raisonnement derrière cette nouvelle valeur par défaut est très bien expliqué dans ce billet de blog:
Pourquoi faites-vous voir la différence dans votre cas? Donc, si vous ciblez .NET 4.0, votre demande sera exécutée dans un processus 64 bits (en raison de la AnyCPU plate-forme cible). De là, vous verrez la version 64 bits du pilote.
Si vous créez un nouveau projet de ciblage .NET 4.5 cependant, votre application s'exécute (avec la valeur par défaut paramètres du projet) au sein d'un processus 32 bits, et vous verrez la version 32 bits du pilote.
Notez que vous devriez voir la différence que si vous créer un nouveau .NET 4.5 projet; si vous venez de changer la .NET version cible à partir de la version 4.0 à 4.5, la plate-forme cible ne change pas de AnyCPU à AnyCPU 32 bits préféré.
OriginalL'auteur Dirk Vollmar