[VB.NET]Consiglio condivisione db per applicazione client/server

martedì 18 maggio 2010 - 23.01

jackk87 Profilo | Junior Member

Buonasera a tutti,
Allora sto sviluppando un'applicazione client/server le due soluzioni sono queste:
1-Database Access
2-Database Sql Server

Per la 1 soluzione dovrei mettere il db in una cartella condivisa e gestire i client tramite un server oppure è possibile condividere il db ai client senza metterlo nella cartella condivisa?

Per la 2 soluzione io mi creo il db su Sql Server Express 2005,e lo codivido per il remoto e nei client basta mettere la stringa di connessione tramite l'ip?il client come fa a sapere se i dati sono stati modificati?manda qualcosa sql server oppure gestisce solo le priorità?

Per il server utilizzo c# e per il client vb.net
Grazie in anticipo a tutti

luka82 Profilo | Junior Member

Scusa non ho capito bene.
Con Access: basta che lo metti in una cartela condivisa e nella stringa di connessione imposti il "percorso della cartella condivisa\NomeFile.mdb"
per SQL Server: installi SQL sul server e imposti il Db e tutti i client nella stringa di connessione non faranno altro che puntare a quel Db su quel server.
Per la concorrenza dei dati è una cosa che devi gestire tu da codice, con Transaction, con flag per "bloccare" un documento, un fornitore, un cliente... in fase di modifica e quindi non permettere agli altri di modificare i dati.

AntCiar Profilo | Expert

Ciao. Se posso darti un consiglio, evita di usare access per fare queste cose. Acces va bene per monoconnessione. Se già due utenti accedono allo stesso DB, acces si pianta maledettamente. Anche noi all'inizio avevamo un database access condiviso con front-end fatto sempre in access. Abbiamo rifatto il front-end in NET ma le prestazioni di Access fanno schifo tanto da passare a MYSQL.
Cristian Barca

kataklisma Profilo | Senior Member

>Ciao. Se posso darti un consiglio, evita di usare access per
>fare queste cose. Acces va bene per monoconnessione. Se già due
>utenti accedono allo stesso DB, acces si pianta maledettamente.
>Anche noi all'inizio avevamo un database access condiviso con
>front-end fatto sempre in access. Abbiamo rifatto il front-end
>in NET ma le prestazioni di Access fanno schifo tanto da passare
>a MYSQL.

Condivido in pieno il pensiero di Cristian, inoltre dovresti spiegare un po meglio la situazione, parli di struttura client server, parli di applicativi client e applicativi server ma poi dici di voler mettere il db in una cartella condivisa o renderlo disponibile direttamente ai "client".

Puoi effettuare chiamate al database tramite un'applicazione server tramite remoting, wcf, webservices....devi solo spiegare meglio la situazione, magari trascrivendo il caso reale.

Ciao!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

jackk87 Profilo | Junior Member

Buongiorno,
prima di tutti grazie a tutti per le risposte cerco di spiegare meglio il problema.

allora dovrei scegliere la strada migliore per sviluppare un'applicazione client/server

io in vb.net ho sempre utilizzato access ma per la multiutenza lo sconsigliano tutti.
Sql server express non l'ho mai utilizzato e le mie domande sono:

1-Installo sql server express 2005 sul server e creo il database (se è possibile crearlo da codice direttamente all'apertura del programma o durante l'installazione)

2-I client puntano tutti a quel database con la stringa di connessione con l'ip dove risiede sql server?

3-Come faccio a gestire la concorrenza dei dati?cioè se un'utente sta modificando il db gli altri non possono farlo e come faccio a sapere se è stato modificato in modo da aggiornare i dati sugli altri client?

mentre se non riesco a farlo con sql server devo rimanere in access crearmi un server per gestire le concorrende e cercare con lo stesso di condividere il db senza metterlo in una cartella condivisa.
Spero di essere stato più chiaro
Grazie in anticipo a tutti.

kataklisma Profilo | Senior Member

>Buongiorno,
Ciao :)

>prima di tutti grazie a tutti per le risposte cerco di spiegare
>meglio il problema.
>
>allora dovrei scegliere la strada migliore per sviluppare un'applicazione
>client/server
>
>io in vb.net ho sempre utilizzato access ma per la multiutenza
>lo sconsigliano tutti.
Infatti, non è assolutamente adatto a gestire piu connessioni, la scelta migliore e gratuita in ambito MS e data dall'uso di SqlServer Express.

>Sql server express non l'ho mai utilizzato e le mie domande sono:
Piccolo appunto, come penso tu abbia capito le possibilità di SqlServer sono infinitamente maggiori rispetto ad Access, quindi tutto cio che ti passa per la mente (come i seguenti punti da te elencati) è fattibile.

>1-Installo sql server express 2005 sul server e creo il database
>(se è possibile crearlo da codice direttamente all'apertura del
>programma o durante l'installazione)
Puoi creare uno script .sql ed eseguirlo mediante relativa funzione del tuo software.

>2-I client puntano tutti a quel database con la stringa di connessione
>con l'ip dove risiede sql server?
Se vuoi far puntare i client direttamente a SqlServer perchè creare un'applicazione Server?Renderebbe la cosa molto piu complessa, comuque si potresti far puntare ogni applicativo direttamente a SqlServer senza alcun problema.

>3-Come faccio a gestire la concorrenza dei dati?cioè se un'utente
>sta modificando il db gli altri non possono farlo e come faccio
>a sapere se è stato modificato in modo da aggiornare i dati sugli
>altri client?
L'aggiornamento non è un problema, se i dati vengono prelevati in modo diretto dal database, ad ogni query corrisponderanno i dati aggiornati.

Per quanto concerne la concorrenza, l'argomento è molto vasto e se ho capito bene la tua problematica uno sguardo a questo articolo su MSDN ti renderà piu chiare le idee :
http://msdn.microsoft.com/it-it/library/tcbchxcb(VS.80).aspx

>mentre se non riesco a farlo con sql server devo rimanere in
>access crearmi un server per gestire le concorrende e cercare
>con lo stesso di condividere il db senza metterlo in una cartella
>condivisa.
Non complicarti la vita ;) access non va bene per questa tipologia di lavori.

>Spero di essere stato più chiaro
>Grazie in anticipo a tutti.
Di niente, ciao!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

jackk87 Profilo | Junior Member

CIao kataklisma e grazie per tutte le risposte sei stato chiarissimo c'è solo un punto da chiarire meglio.

>>3-Come faccio a gestire la concorrenza dei dati?cioè se un'utente
>>sta modificando il db gli altri non possono farlo e come faccio
>>a sapere se è stato modificato in modo da aggiornare i dati sugli
>>altri client?
>L'aggiornamento non è un problema, se i dati vengono prelevati
>in modo diretto dal database, ad ogni query corrisponderanno
>i dati aggiornati.

Per quello che ho quotato:
allora la mia applicazione avrà un win form principale che dovrà visualizzare dei dati contenuti nel db tramite un datagridview quindi per esempio io se sono il client 1 ho la mia applicazione sulla form principale tu che sei il client 2 vai e modifichi i dati. Addesso la mia applicazione Client1 come fa a sapere che deve aggiornare i dati del form principale?
spero di essere stato chiaro
grazie ancora per tutto

kataklisma Profilo | Senior Member

Ciao!

>Per quello che ho quotato:
>allora la mia applicazione avrà un win form principale che dovrà
>visualizzare dei dati contenuti nel db tramite un datagridview
>quindi per esempio io se sono il client 1 ho la mia applicazione
>sulla form principale tu che sei il client 2 vai e modifichi
>i dati. Addesso la mia applicazione Client1 come fa a sapere
>che deve aggiornare i dati del form principale?

Beh cosi su due piedi penso che tu abbia proprio bisogno di sviluppare dei Trigger su Sql Server.
http://programmazione.html.it/guide/lezione/2084/i-trigger/

Questo è l'unico modo, nativo con cui poter intercettare modifiche,inserimento o eliminazione dei dati.

Se ti puo essere utile, sql Server possiede un'altro tipo di trigger, i trigger DDL che si occupano dell'intercettamento delle operazioni DDL (Data Definition Language), come Drop,Alter,Create etc...

Devi aver pazienza e studiare un bel po :)

Spero ti sia stato utile :)

>spero di essere stato chiaro
>grazie ancora per tutto

Di niente, sono qui per questo :)
Buona serata!


------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5