2009-04-09 14 views
1

J'ai besoin d'exporter des données dans une base de données Access. Mon code fonctionne, mais il fonctionne avec l'hypothèse que la machine cliente possède Microsoft.Jet.OLEDB.4.0 en tant que fournisseur valide.Comment puis-je savoir par programme si Microsoft.Jet.OLEDB.4.0 est un fournisseur valide sur un ordinateur client?

Je veux tester pour voir si cela est vrai ou non, dans le code. Mon problème est que je n'ai pas l'emplacement d'une base de données d'accès existante et je ne veux pas créer un nouveau fichier .mdb que j'utiliserais pour vérifier la connexion et ensuite la supprimer.

Est-il possible de dire quels fournisseurs sont installés?

+0

+1, si quelqu'un vers le bas vote, à moins donner une raison pourquoi, afin que l'utilisateur peut éditer sa question! –

+0

Alors que je ne voterais pas cela, le titre a besoin d'être corrigé. Essayez un peu plus difficile la prochaine fois, vous? :) – mmcdole

Répondre

3

Vous pouvez simplement vérifier l'existence de

HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95} 

qui est le CLSID de Microsoft.Jet.OLEDB.4.0.

0

Je crois que si vous avez installé .NET Framework (nécessaire pour exécuter le code VB.NET), alors la machine a le fournisseur que vous mentionnez. MSDN

1

Chaque important fournisseur a classid mentionné sous l'éditeur de registre Ex: - HKEY_CLASSES_ROOT \ CLSID {dee35070-506b-11CF-b1aa-00aa00b8de95}

qui est le CLSID de Microsoft.Jet.OLEDB.4.0.

Pour vérifier par programme, utilisez ci-dessous le code C#, son vérifié sur le cadre 2,0

using System.Data.OleDb; 
OleDbEnumerator enumerator = new OleDbEnumerator(); 
     DataTable table = enumerator.GetElements(); 
     bool bNameFound = false; 
     bool bCLSIDFound = false; 

     foreach (DataRow row in table.Rows) 
     { 
      foreach (DataColumn col in table.Columns) 
      { 
       if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{dee35070-506b-11cf-b1aa-00aa00b8de95}"))) 
        Console.WriteLine("CLSID of Microsoft.Jet.OLEDB.4.0. Found"); 

       if ((col.ColumnName.Contains("SOURCES_NAME")) && (row[col].ToString().Contains("Microsoft.ACE.OLEDB.12.0"))) 
       { 
        bNameFound = true; 
        if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{3BE786A0-0366-4F5C-9434-25CF162E475E}"))) 
         bCLSIDFound = true; 
       } 
      } 
     } 

     if (!bNameFound && !bCLSIDFound) 
      Console.WriteLine("Microsoft.ACE.OLEDB.12.0 Not found"); 
     else 
      Console.WriteLine("Microsoft.ACE.OLEDB.12.0 found"); 

Remember "Fix it droit & ne pas laisser les bugs de test mordent"

Questions connexes