Comment créer une base de données Microsoft Jet (Access) sans assemblage d'interopérabilité?

StackOverflow https://stackoverflow.com/questions/155848

  •  03-07-2019
  •  | 
  •  

Question

Je dois créer une base de données d'accès (mdb) sans utiliser l'assembly interop ADOX.

Comment cela peut-il être fait?

Était-ce utile?

La solution

Avant de jeter ce code, il pourrait tout aussi bien vivre sur 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 de OleDbConnection une fois créée avec le composant ADOX.Catalog COM.

Autres conseils

J'ai fait la même chose que Autsin, créer une base de données Access puis l’inclure 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, de sorte que les frais généraux sont minimes.

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 le nombre de codages et ralentir les requêtes dans la base de données.

Vous n'avez pas besoin d'installer Jet (mal de tête majeur) 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 avec l'accès 2007 et les versions antérieures

Question intéressante - Je n’ai jamais pensé à en créer un à la volée comme celui-ci. J'ai toujours inclus ma base de données de base en tant que ressource dans le projet et en ai fait une copie lorsque j'en avais besoin.

ACE ne figure dans aucun cadre (pas encore dans les 1, 2, 3.5, 4, 4.5)

Cela ne fait pas non plus partie de Windows Update.

JET4 est dans Framework2 et supérieur.

Si vous travaillez avec des fichiers Access / MDB, etc., ne supposez pas que l'ACE est présent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top