2016-06-03 6 views
0

In meiner Anwendung wird ein Benutzer zu einem Zeitpunkt soll (Span Mal, wenn er die Anwendung geöffnet hat) für die gesamte „Sitzung“ mit einer Access-DB-Datei arbeiten. Die Datei muss gesperrt sein, während ein Benutzer damit arbeitet.C# Wie man Access-Datei sperren und damit arbeiten?

ich dies tun, indem Schloss nach: How to lock a file with C#?

FileStream s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.None); 

jedoch, wenn die Datei über Code zugreifen, wird eine Ausnahme ausgelöst, zum Beispiel:

// Connection points to file locked before 
using (OleDbConnection connection = new OleDbConnection(Connection)) { 
connection.Open(); 
//... 

System.Data. OleDb.OleDbException File wird bereits verwendet

Wie wird auf eine zuvor gesperrte Datei zugegriffen? Muss ich die Sperre immer entfernen, bevor ich darauf zugreife? Wenn ja, wie kann sichergestellt werden, dass zwischen dem Entsperren, Zugreifen und erneuten Sperren nicht auf die Datei zugegriffen wird?

+0

Oledb, Access, Excel gemeinsame Nutzung von Dateien nicht richtig funktionieren.. Es wird empfohlen, keine Anwendungsgrundlagen auf oledb zu teilen. – jdweng

+0

Gibt es in diesem Fall eine Lösung? Im Moment kann ich nur mit Access arbeiten und habe keine anderen Möglichkeiten, zu wechseln. Momentan erstelle ich selbst eine Lock-Datei und prüfe vorher, ob diese Datei existiert, aber das ist wirklich schrecklich. – ray

+1

Sperren Sie einfach eine andere Datei. Wenn Sie 'some.mdb' haben, erstellen und öffnen Sie exklusiv' some.mdb.lock', bevor Sie darauf zugreifen. – Sinatr

Antwort

0

Die Lösung in die Tat eine separate Sperrdatei zu erstellen ist und sperrt diese eine Datei-Stream verwendet wird.

(Die Antwort ist tatsächlich gegeben durch Sinatr, nur der Vollständigkeit halber möchte ich es teilen. Doch um herauszufinden, was MS Office zu seinen Office-Dateien tut, als das ist das genaue Verhalten, das ich würde haben möchte - aber das ist eine andere Frage)

1

Ich denke, Ihre Verbindung Exclusive sein muss: http://www.connectionstrings.com/access/

+0

Niemand arbeitet tatsächlich mit der Access Application. Es wird in meinem Fall nicht helfen, da ich die Datei für die gesamte "Sitzung" gesperrt haben möchte, was bedeutet, dass der Benutzer die gesamte Anwendung geöffnet und ausgewählt hat, um mit einer bestimmten Zugangsdatenbank zu arbeiten. – ray

+0

Ok, ich ändere meinen Kommentar, bitte lesen Sie mich. Sie müssen die Verbindung im Modus Exklusiv öffnen, etwas tun und die Verbindung schließen. – Raspberryano

+0

Schnell getestet und leider auch nicht funktioniert. Ich denke, wir reden hier über zwei verschiedene Dinge. Ich habe eine Datei (Access-Datenbank), auf die meine Anwendung von Zeit zu Zeit zugreift. Während der Zeit, in der der Benutzer meine Anwendung geöffnet und diese Datei ausgewählt hat, möchte ich verhindern, dass jemand anders auf die Datei zugreift - sei es mit meiner Anwendung oder einer anderen Anwendung. – ray

Verwandte Themen