Avantages et inconvénients du moteur de base de données Access. La vie après SQLite

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

  •  22-08-2019
  •  | 
  •  

Question

J'ai posé une question il y a un moment sur lequel était DB locale droite pour ma situation. Je avais besoin pour accéder à la base de données à la fois du code .NET et VB6. La réponse était écrasante SQLite. Cependant, j'ai décidé de transmettre SQLite, parce que le seul fournisseur OLE DB pour qu'elle facture des redevances pour chaque copie déployée de mon logiciel. Elle exige également une procédure d'activation à exécuter sur chaque PC.

Après avoir évalué d'autres options (SQL Server Compact Edition - à peine fonctionnelle fournisseur OLE DB, Firebird - ne veulent pas avoir à payer pour un autre conducteur, etc ...), je suis venu à la conclusion que le seul choix viable est l'utilisation des fichiers .mdb créés par Microsoft Access (ou le moteur Jet).

Je ne l'ai pas utilisé depuis la fin des années 90, j'ai donc les questions suivantes à ceux qui ont de l'expérience avec elle.

  1. Ont-ils résolu le problème où la base de données serait corrompue chaque maintenant et puis.
  2. L'accès à la MDB de c # réalisée par le fournisseur OLEDB ADO.NET ou est-il une solution native (je ne peux pas sembler le trouver).
  3. Y at-il une alternative viable à l'éditeur vraiment merdique SQL dans Access?

Merci.

Était-ce utile?

La solution

Plutôt que d'aller « retour » à l'accès, je bâton avec SQLite et utiliser le fournisseur de System.Data.SQLite pour l'accès aux données SQLite dans le code .NET.

Alors que je venais de créer un simple COM Interop classe .NET pour une utilisation par VB6 qui enveloppe toutes les fonctionnalités d'accès aux données SQLite nécessaires. Enfin, juste référence et de l'utiliser comme un objet standard COM de vos projets VB6.

Ma connaissance de l'accès est sans doute un peu daté et biaisé par de mauvaises expériences, mais dans la raison je voudrais essayer la plupart des autres options avant de recourir à la voie d'accès.

Autres conseils

Avez-vous envisagé SQL Server 2008 Express Edition (comme s'opposer à CE SQL Server)?

1) Personnellement, je trouve que la plupart du temps que l'accès aux DB corrompu était dû à un code qui ne nettoie pas après moi, ou il y avait une carte réseau défectueuse en cause.

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
                          @"Data Source = C:\data\northwind.mdb; " +
                          @"User Id = guest; Password = abc123”


using (OleDbConnection oleDbConnection = New OleDbConnection())
{
    oleDbConnection.ConnectionString = connectionString;

    oleDbConnection.Open();

    ...
}

3) SQL Server 2008 Express Edition

corruption MDB est en grande partie due à des défaillances qui se produisent dans les machines clientes, les serveurs de fichiers et les réseaux alors que la base de données est ouverte. Si vous mettez la MDB sur un partage de fichiers ce qui est toujours un risque, si sur un disque dur local et utilisé par un utilisateur les problèmes sont beaucoup plus rares.

Je ne pense SQLite être différent, et si quelque chose de pire.

en cours d'exécution périodiquement JetComp.exe (téléchargement Microsoft) va résoudre de nombreux problèmes et tables d'index compacts et autres. Les sauvegardes sont importantes, peu importe ce que vous utilisez.

Vous n'avez pas besoin de MS Access à tous utiliser Jet BDM. Il existe des outils pour la 3e partie de la conception du schéma de base de données et de faire des requêtes interactives, à la fois la ligne de commande et l'interface graphique.

Le format MDB est plus ou moins dépréciée, vos connaissances de la fin des années 90 est tout à fait à ce jour. Voir cette page MSDN

Vous pouvez également essayer SQL Partout il fonctionne sur différents OS et dispose d'un petit empreinte. Fonctionne pour moi:)

AngryHacker demandé:

Q1. Ont-ils résolu le problème où la base de données serait corrompue chaque maintenant et puis.

Er, quoi?

Il n'y avait jamais aucun problème de la corruption dans les applications correctement conçues correctement déployées dans des environnements bien entretenus. Je ne l'ai pas vu un MDB corrompu en 3 ou 4 ans, et j'ai des dizaines de mes applications en cours d'utilisation de la production à temps plein par de nombreux clients dans de nombreux types d'environnements d'exploitation.

Je pense que la plupart des gens qui souffrent de la corruption sont ceux qui tentent de partager un fichier MDB entre de nombreux utilisateurs (que ce soit divisé ou non découpées). Puisque vous n'êtes pas envisagent d'utiliser Access, ce n'est pas vraiment un problème.

Q2. L'accès au MDB de c # fait via le fournisseur OLEDB ADO.NET ou est-il une solution native (je ne peux pas sembler le trouver).

La solution native serait OAC, mais c'est COM, vous voudrez peut-être de ne pas utiliser. De C #, je dirais que OLEDB est votre meilleur pari, mais ce n'est pas mon domaine d'expertise afin de prendre avec un grain de sel. Je crois que Michael Kaplan a rapporté que le Jet ADO / fournisseur OLEDB était thread-safe, alors que DAO n'est pas. Cela ne veut pas dire qu'il recommande ADO / OLEDB sur DAO, cependant, mais ses commentaires sont également venus dans un contexte d'accès, et non C #.

Q3. Y at-il une alternative viable à l'éditeur vraiment merdique SQL dans Access?

Pourquoi seriez-vous à l'aide que lorsque vous ne l'utilisez réellement accès? Vous pouvez utiliser un éditeur de SQL que vous voulez tant que vous testez que le SQL que vous écrivez est compatible avec le dialecte SQL Jet.

I, pour un, ne vois pas quel est le problème avec l'éditeur SQL Access (autre que l'incapacité de définir la taille de la police), mais, je vous écris beaucoup de mon SQL en utilisant la QBE et ne jamais même regarder la vue SQL.

Pour répondre à votre question concernant l'éditeur de SQL vraiment merdique dans Access - Je suis entièrement d'accord. La police pue, MSAccess toujours reformate mal la requête, il ajoute parfois métacaractères qui rompent mon SQL, et enfin, mais worstly, si elle ne peut pas analyser le SQL, il ne vous laissera pas y avez accès!

Ma solution est d'utiliser le code externe. J'utilise DAO pour instancier MSAccess et peut ensuite modifier directement les requêtes à l'aide de la collection QueryDefs. Il vous permet de faire la plupart des choses - créer, renommer, modifier, etc. Il y a quelques choses que vous ne pouvez pas le faire de cette façon si -. Par exemple, vous n'avez pas accès aux métadonnées de requête (description, caché, etc.)

Le code externe est aussi grand que vous pouvez construire une suite de cas de test, spécifiant des valeurs de rendement attendu, etc.

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