Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.Net] SQL Server 2008 e SQLDependency
Forum - C# / VB.NET - [VB.Net] SQL Server 2008 e SQLDependency

Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 11:36
Sabato, 05/05/2012
Devo notificare tramite SQL Server ad un PC remoto che un campo di una tabella è stato modificato, avrei pensato all'utilizzo della classe SQLDependency supportata dalla versione 2005 di SQl Server ed ho trovato un esempio a questo indirizzo
http://www.dreamincode.net/forums/topic/185244-using-sqlde ...

niente da dire, fa quello che deve fare, però non è proprio come me l'aspettavo poiché l'evento OnChange della SqlDependency viene invocato di continuo (in loop) e non solo nel caso in cui avvenga effettivamente una modifica nel campo interessato, questo rende praticamente inutilizzabile il metodo perché il datareader viene continuamente aggiornato e l'applicazione va a scatti, quindi mi chiedo che senso possa avere...
ho provato anche l'esempio proposto qua: MSDN http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80). ... ma fa lo stesso orrendo effetto

c'è qualche idea per migliorare la situazione?

considerando che vorrei evitare la soluzione di un applicativo client / server per inviare la notifica e vorrei evitare di usare un Timer per verificare se il campo è stato cambiato, anche se vedendo i risultati della SqlDependency sarebbe decisamente meglio il Timer


Ultima modifica effettuata da ampeg il 05/05/2012 alle 11:38
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:13
Sabato, 05/05/2012
secondo me c'è qualcosa di sbagliato nell'approccio al problema, descrivi meglio il tuo scenario in modo che riusciamo a darti una mano.


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 12:58
Sabato, 05/05/2012
lo scenario più o meno è questo:

ci sono 2 PC (ma possono essere di più), uno in ufficio l'altro è in officina, i 2 PC sono in LAN aziendale

su entrambi gira un mio gestionale che usa un db SQL Server 2008 Express installato su un server, in magazzino l'operaio spara i codici a barre per le commesse che vanno in avanzamento (pre-spedizione) e gli vengono visualizzate a video in una griglia dati

successivamente un impiegato dalla postazione in ufficio emette un documento di uscita selezionando a piacere le commesse messe in avanzamento

nel momento in cui l'impiegato salva il documento si deve aggiornare a video la griglia dati del PC in officina poiché le commesse in avanzamento documentate non vengono incluse nella query

al momento l'operazione di aggiornamento in officina viene fatta manualmente cliccando su un pulsante oppure nel momento in cui viene sparato un nuovo barcode

vorrei fare in modo che l'operazione avvenga automaticamente con una notifica ad esempio immettendo in un campo creato appositamente, la data e ora di emissione del documento, in modo che chiunque si appresti a consultare la griglia dell'avanzamento non sia obbligato ad aggiornare manualmente ogni volta

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 16:10
Sabato, 05/05/2012
questo è quanto più vicino a quello che ti serve che sono riuscito a trovare
http://social.msdn.microsoft.com/Forums/en/transactsql/thr ...

considera che puoi scriptare il db usando il CLR, un'opzione è sfruttare questo.

il mio consiglio è quello di lasciar fare al DB il DB ed evitare di aggiungere comportamenti di questo tipo nello strato dati.

sarebbe molto più interessante che il server utilizzi un sistema push per notificare ai client l'aggiornamento dei dati. Potresti stabilire delle connessioni persistenti tra i client e il server che vengono utilizzate (dal server) per notificare i cambiamenti nei dati. La sto solo buttando lì, ma in realtà è più semplice di quanto sembri :)


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 12:01
Domenica, 06/05/2012
ho trovato un altro esempio sempre sulla SQLDependency e va alla grande, tramite un delegate viene invocato l'evento solo quando c'è la modifica effettiva

http://www.codeproject.com/Articles/12335/Using-SqlDepende ...

se può interessare ho riscritto e rivisitato l'esempio in vb.net

la notifica viene ricevuta solo se il dato viene modificato mentre negli esempi precedenti la notifica avveniva a prescindere

Ultima modifica effettuata da ampeg il 06/05/2012 alle 12:03
PM Quote