Base de données SQL minimale C #

12

Je travaille sur un petit projet (pas de production) où j'ai besoin de stocker suffisamment de données que quelque chose comme un CSV serait inefficace à traiter et un serveur SQL / MySQL serait trop. Est-ce que .Net a un moyen de stocker efficacement plusieurs entrées de données avec la possibilité d'interroger sans avoir à gérer et à se connecter à un serveur plutôt que de charger et de traiter un seul fichier.

David
la source
Si vous avez déjà un serveur de base de données opérationnel et en train de créer une autre base de données, il est assez trivial. Si vous n'utilisez que les données, vous pouvez peut-être envisager Access.
Brad
@Brad, ce n'est qu'un projet personnel et je ne gère actuellement aucun serveur de base de données chez moi. Votre suggestion d'Access est peut-être exactement ce que je recherche.
David
4
Je ne suis pas un fan d'Access , mais je lui accorde parfois la bonne solution. Avez-vous envisagé la sérialisation d'objets ? Créez simplement un objet et écrivez-le dans un fichier. (L'objet pourrait être un List<foo>)
Dan Pichelman
Voulez-vous que ceux-ci persistent ou ont-ils seulement besoin d'être en mémoire?
Richard
1
@David: 4000 entrées - si peu? Pourquoi ne pas tous les garder en mémoire? Si vous avez juste besoin d'une base de données en mémoire pour effectuer certaines requêtes, sans aucun outil d'administration, un ensemble de données avec des données (conservées dans un fichier) peut être suffisant pour vos besoins.
Doc Brown

Réponses:

15

Il existe quelques alternatives, sans ordre particulier:

  1. Toutes les versions de Visual Studio (payantes?) Sont livrées avec SQL Server Express installé . Vous pouvez l'utiliser.
  2. (Ugh) Fichiers XML
  3. SQL Server CE (essentiellement, SQL local via un fichier)
  4. SQLite

Plus d'idées ici: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c

Sklivvz
la source
Je veux vraiment quelque chose qui soit totalement autonome dans un seul exécutable, pas de DLL ni de logiciel tiers. Certains des éléments ci-dessus, à l'exception de XML, sont-ils en mesure de répondre à ces besoins?
David
Vous pouvez peut-être intégrer les DLL dans votre exécutable.
Sklivvz
Eh bien, je suppose que la partie la plus importante est qu'aucun service tiers * tel que MSSQL / MySQL ne conviendrait # 3 ou # 4
David
Je ne me souviens pas si SQL CE a un runtime séparé ou non. SQLite ne le fait pas, mais il peut être un peu difficile à configurer avec un projet .NET.
GalacticCowboy
3
J'ajouterais que LocalDB est une option. Voir cette réponse: stackoverflow.com/questions/9655362/…
Andy
4

En plus des options proposées par Sklivvz , n'ayez pas peur de vous aventurer en dehors du domaine SQL et d'utiliser un moteur de base de données orienté objet intégré, tel que Sterling ou DB4O .

Ils offrent les avantages d'être petits et basés sur des fichiers, intégrables dans votre application, mais sont également très rapides et faciles à programmer.

Eric King
la source
3

SQLite serait votre meilleure option.
Comme écrit sur leur site:

SQLite est une bibliothèque de logiciels qui implémente un moteur de base de données SQL transactionnel autonome, sans serveur et sans configuration.

Semble vraiment ce que vous cherchez!

Il y a même un package Chocolatey si vous êtes trop paresseux pour le télécharger et l'installer vous-même!

MaxSC
la source
2

ADO.NET peut sérialiser en XML et possède presque toutes les fonctionnalités d'un SGBDR. (Eh bien, les bon marché, de toute façon.)

Je sais que c'est "Ancien" et regardé de haut, maintenant, mais ADO.NET fonctionne vraiment bien pour exactement ce que vous décrivez. Il fait même un travail assez décent de suivi des modifications non validées.

C'est peut-être "Old", mais ce n'est certainement pas "Busted". Cependant, il a une empreinte mémoire assez lourde, alors appelez-vous là-dessus. 4000 enregistrements ne seront pas un problème.

Wesley Long
la source
pourriez-vous élaborer sur "l'empreinte mémoire lourde"?
David
@David - Cela signifie que l'intégralité de l'ensemble de données serait conservé en mémoire, et pas seulement les enregistrements que vous renvoyez d'une requête. Si vous aviez une base de données de 4 millions d'enregistrements, le tout dans un jeu de données ADO.NET serait un sérieux appel aux ressources, alors qu'un "vrai" SGBDR le conserverait sur un disque jusqu'à ce que vous en demandiez un sous-ensemble. 4000 enregistrements est un petit éternuement dans l'utilisation de la mémoire, donc je ne m'en inquiéterais pas.
Wesley Long
+1, je pense que c'est la meilleure option, pour cette exigence, même quelque chose de petit car SQLlite semble faire beaucoup d'efforts.
Doc Brown