MS Access-Datenbank in C # WinForm App einbetten

8

Ich habe eine C # -Winform-Anwendung, die auf Daten aus einer MS Access-Datenbank zugreift. Das bedeutet, dass meine Anwendungen mindestens zwei Dateien benötigen, die .exe-Datei und die .accdb-Datei. Ist es möglich, die Datenbank in die EXE-Datei aufzunehmen, sodass meine Lösung aus einer einzigen Datei besteht (genauso wie Sie ein Bild in die Projektressourcen aufnehmen würden)? Wenn es möglich ist, sind das wichtige Gründe, warum es nicht gemacht werden sollte und wie würden Sie auf die Daten aus dem Code zugreifen? Das Projekt ist nur ein kleines für den persönlichen Gebrauch, wenn Leistung erreicht wird, spielt es keine Rolle.

Danke im Voraus

    
lace.john 05.11.2010, 14:00
quelle

4 Antworten

3

Es kann gemacht werden. Fügen Sie es einfach zu Ihrem Projekt hinzu, als würden Sie eine andere Datei hinzufügen (Rechtsklick-Projekt - & gt; Hinzufügen - & gt; Existierendes Element), dann alle Dialoge abbrechen, die Ihnen die Bearbeitung ermöglichen, dann klicken Sie mit der rechten Maustaste auf Ihre Datenbank Ihr Projekt-Explorer, gehen Sie zu den Eigenschaften und wählen Sie Build Action : Embedded Resource .

Verwenden Sie dann die folgende Methode, um Ihre Datenbank in eine temporäre Datei zu speichern, die Sie durch Aufruf von Path.GetTempFileName erstellen können.

%Vor%

(Beachten Sie, dass MyEmbeddedDatabase der Name Ihrer eingebetteten Datenbank ist). Verwenden Sie dann Ihren temporären Dateinamen in Ihrer Verbindungszeichenfolge. Stellen Sie sicher, dass Sie Ihre temporäre Datei löschen, nachdem Sie fertig sind. Wie bereits erwähnt, können Sie keine Daten ändern und speichern.

    
Juan 17.12.2011 06:00
quelle
2

Nein, das sollte nicht gemacht werden. Wie würden Sie jemanden senden und auf die EXE-Datei aktualisieren, ohne dass diese ihre Daten verlieren? Halte es getrennt.

Sie müssen eine Möglichkeit haben, zu verwalten, wie Ihre Anwendungen installiert werden, und den Speicherort der Datei in Ihren Verbindungszeichenfolgen anzugeben. Es könnte einen \ Data-Unterordner in Ihrem App-Ordner geben, in dem sich die .accdb-Datei (en) befinden.

    
JeffO 05.11.2010 14:21
quelle
1

Sie können wahrscheinlich nicht erreichen, was Sie mit einer Access-Datenbank als eingebettete Ressource erreichen möchten, aber Sie erhalten das gleiche Ergebnis, wenn Sie alle Ihre Dateien in eine andere ausführbare App einbinden.

Wenn Sie die Wrapper-Anwendung ausführen, extrahiert sie die C # -App, die Datenbankdatei und eine Updater-App (mehr dazu unten) zum Ordner für temporäre Dateien und führt die Hauptanwendung aus.

Wenn die Haupt-App geschlossen ist, wird die Updater-App ausgeführt, wobei die Pfade zur Datenbankdatei und der ursprünglichen Wrapper-Anwendung übergeben werden. Die Updater-App aktualisiert die Wrapper-Anwendungsdatei mit der geänderten Datenbankdatei. Es löscht schließlich die Datenbank-Hauptanwendung und die Datenbankdatei aus dem Temp-Ordner. Leider kann sich die Updater-App nicht selbst löschen, aber Sie können dies umgehen, indem Sie einen Befehl zum runonce-Abschnitt der Registrierung hinzufügen, um die Updater-App beim nächsten Neustart zu löschen.

Anstatt herauszufinden, wie eingebettete Ressourcen extrahiert und eingefügt werden, sollten Sie die Wrapper-Anwendung als komprimierte, selbstextrahierende ausführbare Datei (wie eine selbstentpackende zip- oder rar-Datei) verwenden. Hier ist ein Codeprojekt-Artikel , der beschreibt, wie man eine .Net-Anwendung in eine komprimierte, selbst extrahierende exe.     

voon 09.11.2010 08:44
quelle
-2

Access erfordert das Lesen und Schreiben in die Datei. Das Betriebssystem wird die ausführbare Datei beim Ausführen sperren, so dass sie während der Verwendung nicht geändert werden kann. Dies wird dazu führen, dass es nicht funktioniert, nicht zu erwähnen, dass Access einfach nicht in der Lage, die exe zu lesen, da es ein anderes Dateiformat erwartet.

    
Joel Lucsy 05.11.2010 15:01
quelle