2008-10-01 5 views

Répondre

10

Avant je jette ce code, il pourrait aussi bien vivre stackoverflow

Quelque chose dans ce sens semble faire l'affaire:

if (!File.Exists(DB_FILENAME)) 
{ 
    var cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB_FILENAME; 

    // Use a late bound COM object to create a new catalog. This is so we avoid an interop assembly. 
    var catType = Type.GetTypeFromProgID("ADOX.Catalog"); 
    object o = Activator.CreateInstance(catType); 
    catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr}); 

    OleDbConnection cnn = new OleDbConnection(cnnStr); 
    cnn.Open(); 
    var cmd = cnn.CreateCommand(); 
    cmd.CommandText = "CREATE TABLE VideoPosition (filename TEXT , pos LONG)"; 
    cmd.ExecuteNonQuery(); 

} 

Ce code montre que vous pouvez accéder à la base de données à l'aide OleDbConnection une fois créé avec le composant COM ADOX.Catalog.

+0

Je reçois erreur d'invocation dans cette ligne: 'catType.InvokeMember (" Créer ", BindingFlags.InvokeMethod, null, o, nouvel objet [] {cnnStr});' – Rashad

0

Vous n'avez pas besoin Jet (grand mal de tête) installé, si vous utilisez cette chaîne de connexion dans .net 3,5

Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source=C:\myFolder\myAccess2007file.accdb;Persist 
Security Info=False; 

Cela devrait fonctionner sur l'accès 2007 et au-dessous

+0

Offtopic, savez-vous si cela fonctionne sur X64 ? Est-ce nouveau à 3.5? –

+0

Ceci est nouveau pour le framework 3.5. Je ne suis pas sûr si son x64 est compatible ou non. –

+0

Jet 4 est installé sur toutes les versions de Windows depuis Windows 2000, alors pourquoi vous inquiéter de contourner Jet? L'ACE ne va pas nécessairement être installé, donc je ne vois pas pourquoi vous recommandez ACE. Est-il distribué avec le .NET 3.5 runtime? –

0

Question intéressante - I Je n'ai jamais pensé en créer un à la volée comme ça. J'ai toujours inclus ma base de données de référence en tant que ressource dans le projet et j'en ai fait une copie lorsque j'en avais besoin d'une nouvelle.

1

J'ai fait la même chose que Autsin, créer un Access db puis l'ai inclus dans mon projet en tant que ressource gérée. Une fois là, il est inclus dans le code compilé et vous pouvez le copier sur le disque dur autant de fois que vous le souhaitez. Les bases de données vides sont également relativement petites, donc il n'y a pas beaucoup de frais généraux. Le bonus supplémentaire est la possibilité de configurer la base de données si vous savez comment elle sera utilisée ou quelles tables seront ajoutées à chaque fois, vous pouvez réduire la quantité de codage et les requêtes de base de données lentes.

0

ACE ne dans un cadre (encore. C.-à-pas 1, 2, 3,5, 4, 4,5)

Il est également pas partie de Windows Update.

JET4 est dans Framework2 et supérieur.

Si vous utilisez des fichiers Access/MDB, etc., ne supposez pas que ACE est présent.

Questions connexes