2013-12-09 17 views
5

Riferendosi a mettere in discussione How do I share a SQL Server CE database file (.sdf) for multiple processes?SQL violazione di condivisione di file CE per più processi sulla macchina locale

Secondo MSDN, SQL CE permette di 256 connessioni simultanee al database unico.

Ma anche sulla macchina SAME, affronterò l'errore di violazione di condivisione quando apro lo stesso database BUT con 2 processi diversi (a.exe & b.exe, il codice è lo stesso). Quale sembra essere il problema qui?

usavo stringa di connessione

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

È necessario connettersi al servizio non al file per l'accesso simultaneo. Non sono sicuro che il CE abbia un servizio. Si riferiscono a 256 connessioni in uno scenario web. – Paparazzi

+0

@ Band puoi mostrarmi qualche codice di esempio? Sto cercando di avere 2 processi di accesso allo stesso database (leggi e scrivi) – Dennis

+0

Probabilmente hai bisogno di esporre i dati ... come servizio (WCF di WebApi) .... e le 2 diverse app/processi parlano con quello un servizio ..... e il servizio parla al database ... Le connessioni non sono le stesse di Processi. Inoltre, Microsoft Access 16bit diceva che supportava 255 connessioni, ma quello era il papavero. Penso che in seguito l'abbiano rivista a 10-15 come ragionevole. E pensa ... in una webapp (o simili) si aprono e si chiudono rapidamente le connessioni ... non vivono e si attardano. Ma penserei alla rotta WCF (o WebApi), invece di 2 processi diversi che accedono a questo file ........ – granadaCoder

risposta

4

Questa non è la risposta che si desidera ascoltare, ma non si dovrebbe mai tentare di aprire un file SQL CE da più processi. Sì, lo so, SQL CE 4.0 consente più scrittori, e pensi che non avrai mai più scrittori che scrivono sullo stesso disco, ma è come pensare che sia sicuro manipolare le motoseghe infuocate fintanto che indossi una benda.

SQL CE modifica i byte modificati all'interno del file di dati in tempo reale. Non è possibile farlo in modo affidabile da più processi. Pensi di poterlo fare, ma non puoi. Leggi lo accepted answer alla domanda che hai citato; utilizzare un database orientato ai servizi come SQL Express.

+0

ma secondo la http://technet.microsoft.com/en-us/library/ms171817.aspx modalità "Read Write" "Permette a più processi di aprire e modificare il database", non è possibile? – Dennis

+1

Non penso che tu capisca quanto sia difficile fare ciò che stai chiedendo; tu stesso dovrai scrivere SQL Server Express. È molto facile fare errori impercettibili che corrompono i tuoi dati e non lasciano traccia. Non andare su questa strada, usa SQL Express, questo è ciò per cui è progettato e SQL CE no. –

0

Nel mio caso, il file era in qualche modo bloccato. Stavo usando TFS online e il file sdf era in modalità locked/edit, anche se avevo estratto il file e rimosso il flag di sola lettura dall'attributo file.

Per risolvere il problema, ho dovuto aprire tfs source control explorer e rimuovere il blocco.

Assicurarsi che il file non sia bloccato.

Nota: questo è un vecchio post ma sto solo aggiungendo questa risposta in modo che possa essere utile a qualcuno che si trova ad affrontare questo problema.