2013-12-09 6 views
5

Bezug How do I share a SQL Server CE database file (.sdf) for multiple processes?SQL CE File-Sharing-Verletzung für mehrere Prozesse auf dem lokalen Rechner

Laut MSDN, SQL CE erlaubt 256 gleichzeitige Verbindungen zu einzelnen Datenbank zu hinterfragen.

Aber selbst auf der gleichen Maschine, ich konfrontiert Austauschverletzung Fehler, wenn ich die gleiche Datenbank öffnen, aber mit 2 verschiedenen Prozess (a.exe & b.exe, Code ist der gleiche). Was scheint hier das Problem zu sein?

Ich war mit Verbindungszeichenfolge

SqlCeConnection("Data Source=d:\test.sdf;Encrypt Database=True;Password=test;File Mode=read write;") 
+0

Sie müssen eine Verbindung zum Dienst herstellen, nicht die Datei für den gleichzeitigen Zugriff. Nicht sicher, ob das CE einen Service hat. Sie beziehen sich auf 256 Verbindungen in einem Webszenario. – Paparazzi

+0

@Blam können Sie mir einen Beispielcode zeigen? Ich versuche, 2 Prozess Zugriff auf die gleiche Datenbank (lesen und schreiben) – Dennis

+0

Sie müssen wahrscheinlich die Daten als Service (WCF von WebApi) zu offenbaren .... und haben die 2 verschiedenen Apps/Prozesse damit zu reden ein Service ..... und den Dienst mit der Datenbank sprechen lassen .... Verbindungen sind nicht dasselbe wie Prozesse. Auch Microsoft Access 16bit sagte, dass es 255 Verbindungen unterstützt, aber das war Mohn-Hahn. Ich denke, sie haben es später auf 10-15 als angemessen überarbeitet. Und denke ... in einer Webapp (oder ähnlich) öffnest und schließt du schnell Verbindungen. Sie leben nicht und verweilen. Aber ich würde über die WCF (oder WebApi) Route, anstatt 2 verschiedene Prozesse auf diese Datei zugreifen ........ – granadaCoder

Antwort

4

Dies ist nicht die Antwort, die Sie hören wollen, aber Sie sollten nie eine SQL CE-Datei von mehreren Prozessen zu öffnen versuchen. Ja, ich weiß, SQL CE 4.0 erlaubt mehrere Schreiber, und du denkst, du wirst niemals mehrere Schreiber haben, die auf den gleichen Rekord schreiben, aber das ist wie das Denken, dass es sicher ist, brennende Kettensägen zu jonglieren, solange du eine Augenbinde trägst.

SQL CE ändert geänderte Bytes in der Live-Datendatei. Sie können dies nicht zuverlässig aus mehreren Prozessen durchführen. Du denkst du kannst es, aber du kannst nicht. Lesen Sie die accepted answer zu der Frage, die Sie zitiert haben; Verwenden Sie eine serviceorientierte Datenbank wie SQL Express.

+0

, aber nach http://technet.microsoft.com/en-us/library/ms171817.aspx "Read Write" Modus "Erlaubt mehrere Prozesse zu öffnen und die Datenbank zu ändern", ist es nicht möglich? – Dennis

+1

Ich glaube nicht, dass Sie verstehen, wie schwierig es ist, das zu tun, was Sie fragen; Sie müssen SQL Server Express effektiv selbst schreiben. Es ist sehr einfach, subtile Fehler zu machen, die Ihre Daten beschädigen und keine Spuren hinterlassen. Gehen Sie nicht diese Route hinunter, verwenden Sie SQL Express, dafür ist es vorgesehen und SQL CE ist es nicht. –

0

In meinem Fall war die Datei irgendwie gesperrt. Ich benutzte TFS online und die SDF-Datei befand sich im gesperrten/bearbeiteten Modus, obwohl ich die Datei ausgecheckt und das schreibgeschützte Flag aus dem Dateiattribut entfernt hatte.

Um es zu beheben, musste ich tfs Source Control Explorer öffnen und die Sperre entfernen.

Bitte stellen Sie sicher, dass die Datei nicht gesperrt ist.

Hinweis: Dies ist ein alter Beitrag, aber ich füge nur diese Antwort hinzu, so dass es für jemanden hilfreich sein könnte, der mit diesem Problem konfrontiert ist.

Verwandte Themen