2009-10-16 8 views
9

Ich mache dieses winzige Dienstprogramm (Windows Forms) und es müsste ein wenig Daten auf der Festplatte speichern. In DB-Begriffen würde es sich um eine Tabelle handeln, nicht mehr als etwa ein paar tausend Zeilen, wobei jede Zeile weniger als 1 KB groß ist.Welche Möglichkeiten gibt es für eine schnelle eingebettete DB in .NET?

Was würden Sie verwenden?

Hinzugefügt: Vergessen zu sagen - es wäre wirklich nett, wenn das ganze Programm nur eine .EXE-Datei wäre (plus die Datendatei natürlich). Daher würde ich etwas bevorzugen, das in .NET eingebaut ist.

Antwort

23

SQLite .Es ist klein und haben great wrapper für .Net.

+0

+1. Ich wusste nichts über den Wrapper für .NET. Sehr cool. –

+1

Und der .NET-Port http://code.google.com/p/csharp-sqlite/ – mcintyre321

+0

Nur als eine zusätzliche Einschränkung für den SQLite-Wrapper unterstützt es LINQ. –

8

Sie können SQL Server Compact Edition (im Lieferumfang von Visual Studio enthalten) oder SQLite verwenden.

Es gibt viele andere, aber diese sind am häufigsten.

Ich bin ein großer Fan von SQLite, weil es winzig, einfach und schnell ist. Es gibt eine tolle ADO.NET provider dafür, die das Entity Framework unterstützt.

1

der .NET-Port von SQLite ist . Es ist pure .NET, also können Sie ILMErge in eine einzelne .exe

3

Wenn Sie eine eingebettete DB verwenden möchten, dann ist SQL Server Compact Edition wahrscheinlich Ihre beste Wette, gefolgt von SQLite als eine nahe Sekunde.

Wenn Sie eine Tabelle sprechen, klingt es wie eine eingebettete DB möglicherweise übertrieben und Sie könnten besser durch eine einfache Textdatei bedient werden.

2

Ich bin die zweite Stimme für SQLite. SQL Server CE ist viel zu schwer für eingebettete Zwecke, es sei denn, Sie benötigen eine einfache Synchronisation mit einer zentralen Datenbank - dann ist es fantastisch.

4

Wenn Sie eine einzelne Tabelle sprechen, kann ich nicht ganz sehen, warum Sie glauben, dass Sie eine relationale Datenbank verwenden müssen, um Ihre Ziele zu erreichen. Was ist mit einer einzelnen Datei?

Je nachdem, aus welchem ​​Grund Sie Informationen speichern müssen und wie die Daten zusammenhängen, kann es natürlich einen Grund geben, dass Sie eine db benötigen. Aber Sie sollten überlegen, ob eine DB tatsächlich das ist, was Sie in diesem Fall brauchen.

Eine relationale Datenbank sollte nicht der Defacto-Standard zum Speichern von Daten sein. Bevor Sie das RDBMS auswählen, sollten Sie viele Alternativen in Betracht ziehen.

Siehe zum Beispiel mcintyre321's Beitrag.

+0

Lustig, wie Leute das Wort "DB" sehen und sofort sind sie in das Denken von DBMS gebunden. Habe ich irgendwo gesagt, dass ich ein vollständiges DBMS haben wollte? In der Tat dachte ich mehr über Flat-File-Lösungen, XML-Serialisierung und dergleichen nach. Ich fragte mich nur, was andere Leute tun würden und warum oder warum würden sie keine Lösungen wählen. +1 –

+0

Ich wäre neugierig zu wissen, was das schnellste flache Dateiformat und die Bibliothek sein würde, um es abzufragen. Das häufigste Problem ist, dass Sie nicht den Vorteil eines Indexes haben, wenn Sie flache Dateien ohne Engine im Hintergrund suchen, um die Indizes zu generieren. –

+0

Das grenzt an das Sein und Einbetten von DBMS. Flache Dateien sind flach, weil sie keine Indizes haben. MEINER BESCHEIDENEN MEINUNG NACH. –

1

Für etwas so kleines und einfaches würde ich wahrscheinlich mit XML gehen und keine Datenbank verwenden. Wenn Sie den CRUD-Code abstrahieren, können Sie den Datenebenenabschnitt des Codes später so ändern, dass eine Datenbank verwendet wird, wenn die Größe und Komplexität der Daten zunimmt.

0

Wenn es nicht eine SQL-kompatible Datenbank sein muss, dann würde ich auch Db4o betrachten. Db4o ist eine Objektdatenbank für Java und .NET. Die .NET-Version ist vollständig in C# geschrieben.

3

Sie können ein Array Ihrer Klasse erstellen, es markieren [Serializable] und einfach die integrierten serialize/deserialize-Methoden für die Persistenz verwenden.

1

Einmal untersuchte ich dasselbe Problem. Aus allen möglichen Kandidaten sahen zwei gut aus. Dies sind SQLite und Firebird (firebirdsql.org). Aber der Firebird hatte mehr Funktionen als SQLite.

UPD: Hier eine interessante Informationen über Firebird + Dotnet http://www.firebirdsql.org/dotnetfirebird/embedded/index.html

+0

+1 für die Benennung einer Alternative zu SQLite – tobsen

0

I zweite SQL Lite oder eine einfache XML-Datei mit deflate Schriftsteller Größe zu minimieren. Schnell und nicht so schmutzig.

1

Berkeley DB ist auch eine gute Wahl für eingebettete Datenbank. Und es gibt eine library, die eine .NET 2.0-Schnittstelle dafür bietet.

0

Versuchen Sie diese: https://github.com/mdsoftware/mData. Keine Drittanbieter, alle Quellen enthalten, einige nette Dinge wie Lisp-ähnliche Datenverarbeitung und Expression-Compiler sind ebenfalls enthalten. Ich habe versucht, etwas wirklich einfaches aber funktionell zu machen.

Verwandte Themen