2008-08-03 15 views
29

Ich war (und bin immer noch) auf der Suche nach einer eingebetteten Datenbank für die Verwendung in einer .net (C#) - Anwendung. Der Vorbehalt: Die Anwendung (oder zumindest die Datenbank) wird auf einem Netzlaufwerk gespeichert, aber nur von jeweils einem Benutzer verwendet.Eingebettete Datenbank für .net, die über ein Netzwerk ablaufen kann

Nun war meine erste Idee SQL Server Compact edition. Das ist wirklich gut integriert, aber es kann nicht von einem Netzwerk ablaufen.

Firebird scheint das gleiche Problem zu haben, aber die .net-Integration scheint nicht wirklich erstklassig zu sein und ist weitgehend undokumentiert.

Blackfish SQL sieht interessant aus, aber es gibt keine Testversion der .NET-Version. Die Preise sind auch in Ordnung.

Alle anderen Vorschläge von etwas, das gut mit .net funktioniert und läuft von einem Netzwerk ohne die Notwendigkeit der tatsächlichen Installation einer Server-Software?

+0

Interessant, dass dieser Beitrag nicht berücksichtigt werden „Meinung basiert“ im Gegensatz zu meinem Beitrag http://stackoverflow.com/questions/20229964/multi-user-application-without -need-to-install-alles-eingebettete-Datenbank-das. Anyway - ich denke, alle vorgeschlagenen eingebetteten Datenbanken arbeiten für einen Benutzer auf dem Server (einschließlich SQL CE), einige von ihnen ermöglichen gleichzeitige Lesevorgänge (wie SQLite), aber nur eine (mindestens die einzige, die ich gefunden und getestet, dass es funktioniert !), die gleichzeitige Schreibvorgänge erlaubt ist VistaDB – Prokurors

Antwort

21

SQLite kam mir in den Sinn, während die Frage zu lesen, und ich bin mir ziemlich sicher, dass es möglich ist, es von einem Netzlaufwerk zuzugreifen, wenn Sie sich auf die Einschränkung von 1 Benutzer zur gleichen Zeit halten.

SQLite on .NET - Get up and running in 3 minutes

+0

Ich habe es in den letzten Wochen getestet, und SQLite ist wirklich ein großartiges Produkt. Es ist natürlich kein vollwertiges RDBMS, aber es hat alle Funktionen, die benötigt werden, um den Job zu erledigen. –

+0

@Sven: SQLite hat tatsächlich ziemlich umfassende Dateisperren, und eine SQLite-Datenbank kann definitiv von mehreren Benutzern gleichzeitig aufgerufen werden. Auf Dateisystemen, die dies unterstützen, verwendet SQLite sogar Byte-Range anstelle von Ganz-Datei-Sperren, um die Leistung mehrerer gleichzeitiger Anwendungen derselben Datenbank zu verbessern. Es ist nicht Zugang; es ist ziemlich robust. –

+0

@ChrisHanson Erlaubt nur Lesezugriff für mehrere Benutzer gleichzeitig – Prokurors

6

prüfen VistaDB aus. Sie haben ein sehr gutes Produkt, die Server-Version (3.4) ist in Beta und steht kurz vor der Veröffentlichung.

4

Warum nicht SQL Server 2005 Express edition verwenden?

Es hängt wirklich davon ab, was Sie mit "eingebettet" meinen - aber Sie können SQLServer2005E mit Ihren Anwendungen neu verteilen und der Benutzer muss nie wissen, dass es dort ist.

Embedding SQL Server Express in Applications

Embedding SQL Server Express into Custom Applications

+0

@CodingTheWheel: Weil es auf einem Server installiert werden muss und der Benutzer einen Dienst im Hintergrund bemerkt, spätestens wenn die Alarmglocken jedes Netzwerksicherheitswerkzeugs gehen aus. Eingebettet bedeutet, dass es Teil der Anwendung oder separat ist.dll, aber es erfordert keine Installation, versucht nicht, Sachen in der Registrierung zu tun, und lässt keine Akten zurück, wenn Sie es löschen, ausgenommen für die Datenbank. SQL Server Express ist nicht eingebettet, Microsoft verwendet "Einbetten" als "Verpacken mit Ihrer Anwendung, aber immer noch eine separate Sache mit Abhängigkeiten". Es gibt viele u –

8

Es klingt wie ADO/Zugang für Ihre Bedürfnisse perfekt. Es ist in den MS-Stack eingebacken, gut gewürzt und Multi-User.

Sie können programmatisch einen DB wie so erstellen:

Dim catalog as New ADOX.Catalog 
Catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\server\path\to\db.mdb") 

Sie können dann Standard ADO.NET Methoden verwenden, um mit der Datenbank zu interagieren.

8

Sie können den eingebetteten firebird verwenden, es ist nur eine DLL, die Sie benötigen, um mit Ihnen App zu versenden.

Über Dinge, die nicht dokumentiert sind, das ist nicht wirklich wahr, der Firebird .NET Treiber implementiert die ADO Interfaces, wenn Sie ADO kennen, können Sie mit Firebird arbeiten, im Grunde anstelle von SQLConnection werden Sie FBConnection usw. verwenden, aber mein Rat ist eine Datenzugriffsschicht zu schreiben und verwenden nur eine Schnittstelle auf Ihrem Code, so etwas wie:

using FirebirdSql.Data.FirebirdClient; 

public static IDbConnection MyConnection() 
{ 
    FbConnection cn = new FbConnection("..."); 
    return cn; 
} 

Dieses Beispiel ist sehr einfach, aber Sie werden nicht brauchen, dass viel mehr als.

Wir verwenden Firebird für unsere gesamte Anwendung ohne Probleme, Sie sollten es zumindest ausprobieren.

2

Es gibt auch Valentina.Ich habe über dieses Produkt berichtet, als ich an einem Real-Basic-Projekt gearbeitet habe. Die RB-Version ist sehr gut.

10

Ich würde Advantage Database Server (www.advantagedatabase.com) empfehlen. Es ist eine ausgereifte eingebettete Datenbank mit großer Unterstützung und von vielen Entwicklungssprachen zusätzlich zu .NET zugänglich. Die "lokale" Version ist kostenlos, läuft in Ihrer Anwendung in Form einer DLL, erfordert keine Installation auf der Server-/Netzwerkfreigabe und unterstützt alle wichtigen DB-Funktionen. Sie können die DB- und/oder Anwendungsdateien im Netzwerk speichern. es ist egal, wo die Daten sind.

Haftungsausschluss: Ich bin ein Ingenieur in der ADS R & D-Gruppe. Ich verspreche, es rockt :)

7

Ein wenig spät zum Beitrag hier .. Und VistaDB ist bereits erwähnt, aber ich wollte darauf hinweisen, dass VistaDB zu 100% verwaltet wird (seit Ihr Beitrag mit .net getaggt wurde). Es kann von einem freigegebenen Netzlaufwerk ausgeführt werden und ist 1 MB xcopy implementiert.

Da Sie SQL CE erwähnen, unterstützen wir auch T-SQL Syntax und Datentypen (in der Tat mehr als SQL CE) und verfügen über aktualisierbare Ansichten, TSQL Procs und andere Dinge, die in SQL CE fehlen.

+0

Eine weitere gute Sache über Vista (im Vergleich zu anderen) ist, dass es gleichzeitige Schreibvorgänge für Datenbankdatei unterstützt, die an einem Netzwerkstandort befindet - für mich war es Entscheidungsfindung Feature – Prokurors

4

Ich bin verwirrt.

Sie fragen nach einer eingebetteten Datenbank - wo die Datenbank selbst auf dem Server gespeichert ist. Das bedeutet, dass die Datendatei auf einer Netzwerkfreigabe gespeichert wird. Sie sagen dann, dass SQL Compact Edition wird ... nicht funktionieren, außer dass, wenn man in diesem Dokument sieht:

Word-Dokument:
Choosing Between SQL Server 2005 Compact Edition and SQL Server 2005 Express Edition

Auf Seite 8 Sie haben ein schönes großen grünen Häkchen neben " Datendateispeicher auf einer Netzwerkfreigabe ".

So scheint es mir, dass Ihr erster Gedanke der richtige war.

+0

Das ist lustig, weil SQL Server speziell sagt mir es wird nicht: http://img512.imageshack.us/img512/6082/sqlceerror.jpg - vielleicht ist es ein Missverständnis, da das Erstellen nicht möglich zu sein scheint, während der Zugriff funktionieren könnte. Für meine Zwecke war es jedoch wichtig, die Datenbank beim Start der Anwendung zu erstellen. –

+0

Die Realität übertrumpft die Dokumentation in fast allen Fällen - es stellt sich dann die Frage, warum die Doktoren das "Falsche" sagen (oder zumindest wie die Diskrepanz entsteht). [FX: Browse, Browse] Informationen sind relativ dünn in MSDN – Murph

+0

Sie _CAN_ speichern Ihre Datenbank in SQL Server in einem Netzwerkspeicher, aber nur 1 SQL Server kann darauf zugreifen. Und Sie laufen dann im angeschlossenen Modus, der langsamer als Schmutz ist. Nur weil du kannst, heißt das nicht, dass du es tun solltest. Er fragte nach jeder App, die direkt auf die Datenbank zugreife, nicht über eine Server-App. –

2

Haben Sie eine OODB in Betracht gezogen? Von den verschiedenen Open-Source-Alternativen empfehle ich db4o (Entschuldigung für die Eigenwerbung :)), die entweder eingebettet oder im Client/Server-Modus ausgeführt werden kann.

Beste

Adriano