2010-01-22 17 views
7

Devo progettare un'applicazione è principalmente un'interfaccia con un database per l'immissione dei dati. L'applicazione deve essere in grado di funzionare mentre viene disconnessa dal database con i dati memorizzati nella cache e inserire tali dati quando ha di nuovo la connessione. Ci saranno due diverse modalità, connesse o disconnesse, nessuna necessità di rilevare la disconnessione nel mezzo di una sessione connessa per passare alla disconnessione.Motivo di progettazione per un'applicazione di database che deve essere disconnessa

Poiché questo mi sembra un requisito comune mi chiedevo se esiste un approccio "standard" per affrontare questo problema. Memorizzazione nella cache delle tabelle al file locale, serializzazione dei dati richiesti al database o altro. Forse esiste una libreria esistente per farlo?

Grazie in anticipo.

PD: L'applicazione sarà fatto in .Net

EDIT: È un'applicazione WinForms, non un Web uno.

EDIT2: per immettere ulteriori dettagli sull'applicazione è necessario immettere i dati in un database, ma a volte gli utenti saranno fuori sede diverse settimane e sarà necessario immettere i dati come se fossero collegati con i dati memorizzati nella cache dal database e questi dati inseriti saranno trasferiti al database quando si ricollegheranno di nuovo.

risposta

3

Lo scenario si sta descrivendo può essere risolto con la replica del database. Ad esempio, se si utilizza MS SQL Server come db principale C/S, è possibile replicarlo su un'installazione MSSQL Express locale sulla workstation o sul notebook degli utenti offline. Finché gli utenti non sono in ufficio, l'applicazione deve connettersi al DB locale e al suo ritorno, le modifiche vengono replicate nel DB centrale. Penso che questo sia l'approccio "standard" che stai cercando, in cui non devi scrivere codice speciale per la tua situazione offline (ad eccezione del codice che cambia la connessione e del codice per avviare la replica).

Potrebbe essere di interesse per voi che il sistema CRM utilizzato dalla nostra azienda funziona proprio così, il DB locale utilizzato è "MSSQL desktop engine", il predecessore dell'edizione Express, ma IMHO questo dovrebbe funzionare con Express edizione, anche. Per quanto ne so, non è necessario pagare alcuna tariffa di licenza per le istanze di MSSQL Express.

+0

La replica del database aggiunge solo dati al server principale o la sostituisce? Ho bisogno che tutti i dati vengano aggiunti al server DB principale ma non sostituiti. Quindi dovrei replicare il server principale sul server locale sulla connessione, ma semplicemente aggiungere dati da locale a principale quando ci sono dati disponibili. –

+0

Se vuoi che la tua applicazione abbia un comportamento limitato come "aggiungi solo" in modalità disconnessa, devi ovviamente gestirla nell'interfaccia utente della tua applicazione, che è qualcosa che il tuo database non può fare per te. Dai un'occhiata a MSDN qui http://msdn.microsoft.com/en-us/library/ms151329.aspx per ulteriori informazioni sulla replica di merge di SQL Server e sulla risoluzione dei conflitti. –

1

ADO.NET in disconnected mode [collegamento PDF] può essere il tuo punto di partenza.

+0

Penso che questo non si applica a quello che ho messo sul mio EDIT2, non è vero? –

0

Come già risposto, ado.net è una scelta logica.

http://msdn.microsoft.com/en-us/library/aa719836%28VS.71%29.aspx

Utilizzando DataAdapter riempire DataSet (in memoria), uso che DataSet mentre si è disconnessi, quando ci si connette aggiornamento del database utilizzando di nuovo DataAdapter.

+0

Penso che questo non si applica a ciò che ho messo sul mio EDIT2, non è vero? –

0

Non sono sicuro se si desidera creare un'app per desktop o desktop ma le funzionalità di Silverlight out of browser sono abbastanza pulite. Link fornisce un punto di partenza impressionante

+0

È un'applicazione standard di WinForms, non correlata al Web. –

+1

Memento è il modello di progettazione se questo è quello che volevi sapere ... quindi quando in modalità disconnessa hai opzioni come 1. Disconnected ADO.net come pubblicato da Learning 2. Embedded RDBMS come SQLite 3. OODBMS embedded come db40 o versant. – Perpetualcoder

+1

In modalità connessa ... il client interagisce direttamente con il server.Al momento della disconnessione, sarà necessario salvare i dati in uno dei 3 metodi o semplicemente la vecchia serializzazione .net ... alla riconnessione il software del server dovrà essere in grado di consumare i dati dall'archivio dati locale – Perpetualcoder

0

si consiglia di esaminare come Google Gears è stato progettato

+0

Mmm, penso che questo non abbia nulla fare con il problema spiegato qui. –

+0

ha qualcosa a che fare con il problema qui definito. gears memorizza i dati da internet (che potrebbe essere un database online) per l'accesso offline. gli utenti possono apportare modifiche ai dati in modalità offline e gli ingranaggi si sincronizzeranno con la sorgente effettiva alla successiva connessione disponibile. – Aadith

+0

potresti anche considerare l'uso di database in memoria come SQLite che potrebbe fungere da cache per il tuo db principale. (in effetti, è così che funziona google gears). ci sono modi standard di configurare i DB in memoria come cache al tuo principale db – Aadith

Problemi correlati