View Full Version : [ASP.NET/SQL SERVER 2008EX] Aggiornamento automatico db
Katzenjammer
8th June 2009, 15:10
Per farvi capire bene cosa mi serve penso sia meglio spiegare a cosa servirà sto tocco di codice.
Si tratta di una biglietteria.
Il cliente acquista il biglietto, all'atto dell'acquisto viene generata una stringa che viene scritta all'interno di un file di testo. Una funzione scritta da me, poi, divide queste stringhe in vari "pezzi" che vengono poi scritti su di un database.
Quando il cliente si presenterà al tornello, "striscerà" il codice a barre del biglietto contro un lettore, che confronterà i dati del codice a barre con quelli presenti sul DB e, se coincidono, sbloccherà il tornello.
E' necessario quindi che il database sia aggiornato di frequente (circa ogni minuto) e che quindi la mia funzione che esegue l'aggiornamento parta automaticamente ogni tot.
Dovrebbe risultare una cosa tipo: impiegato clicca su "aggiorna db" all'inizio della giornata, e quello va avanti per tutto il giorno da solo, finchè impiegato non clicca su "ferma aggiornamento db".
Cosa posso usare? Basta che mi spiegate cosa cercare e se c'è un metodo già fatto in ADO.NET.
Ho provato a googlare un pò ma niente da fare :\
vi vi bi in anticipo
Warbarbie
8th June 2009, 15:12
Non puoi schedulare le procedure di aggionamento del db per farle girare con cadenza fissa?
Katzenjammer
8th June 2009, 15:18
Non puoi schedulare le procedure di aggionamento del db per farle girare con cadenza fissa?
Non sono sicuro di aver capito bene quello che intendi.
Il tutto è scritto in vb.net e gira su IIS, non in locale. Non c'è un programma indipendente che esegue l'aggiornamento, è tutto via browser.
C'è una classe contenente la procedura di aggiornamento, chiamata dal tasto "aggiorna db".
San Vegeta
8th June 2009, 15:41
qualunque db serio supporta la schedulazione e l'esecuzione automatica di script *SQL. Tu pero' devi usare un programmino per leggere i dati, se ho capito bene, quindi devi vedere in IIS se puoi agganciare dei processi da eseguire. In alternativa, sono sicuro che .net permette di creare un thread che si attivi ogni x millisecondi, ma non so dirti come. Cerca su msdn se ci sono esempi
Domanda: ma perché dopo aver generato la stringa non la fai scrivere direttamente nel db?
Katzenjammer
8th June 2009, 15:49
Domanda: ma perché dopo aver generato la stringa non la fai scrivere direttamente nel db?
Perchè la stringa viene generata da un programma certificato dall'agenzia delle entrate, che genera un sigillo (un codice univoco per ogni biglietto) e scrive su sto file di testo (.trn).
Il .trn fa fede fiscalmente.
Noi possiamo solo estrapolare dati dal trn e gestirli.
Tutto deciso dalla leggggge.
Tunnel
8th June 2009, 15:50
Han già risposto.
O fai una stored procedure schedulata o fai scrivere direttamente come dice vege.
In alternativa poi fare un trigger on inserted... ma anche no :confused:
San Vegeta
8th June 2009, 15:55
no tunnelino, non puo' fare cosi. Mo vedo se trovo qualcosa, tanto mi sto annoiando a morte
Katzenjammer
8th June 2009, 15:57
Eh ora provo a cercare un pò in giro.
Peccato che non riesca a capire come si installa SQL Server Management Studio 2008.
Lo scarico, avvio l'installer, e mi parte il centro installazione SQL Server, con opzioni che boh, non c'entrano un cazzo.
Fin'ora ho fatto tutto tramite sqlcmd, ma ora mi farebbe seriamente comodo :V
Katzenjammer
8th June 2009, 15:58
doppio :|
Tunnel
8th June 2009, 15:58
no tunnelino, non puo' fare cosi. Mo vedo se trovo qualcosa, tanto mi sto annoiando a morte
Se ha accesso diretto al DB la store può usarla eh
basta che schedula l'import del file del cazzo la
San Vegeta
8th June 2009, 16:10
Se ha accesso diretto al DB la store può usarla eh
basta che schedula l'import del file del cazzo la
Vero.
Cmq la classe TimerCallback é quella che ti serve, sta in System.Threading. Su msdn ci sono degli esempi
Katzenjammer
8th June 2009, 16:20
Vero.
Cmq la classe TimerCallback é quella che ti serve, sta in System.Threading. Su msdn ci sono degli esempi
Grazie mille. Ora checko.
Mosaik
8th June 2009, 16:47
Altrimenti fai un servizio windows con la classe FileSystemWatcher che monitorizza l'FS.
Come intercetti la modifica lancia l'aggiornamento :)
Con un thread si fa in modo abbastanza semplice, se ho capito bene quello che ti serve:
In C# col namespace System.Threading:
Thread thread = new Thread(ThreadProcedure);
thread.Start();
void ThreadProcedure()
{
while (true)
{
//tuo codice
Thread.Sleep(60000); //1 minuto
}
}
Ovviamente mettendo la condizione di uscita dal ciclo, che corrisponde al "ferma aggiornamento db" che dici tu, mentre la creazione del thread va agganciata all "aggiorna db".
In alternativa puoi usare funzioni di sistema operativo tipo WaitForSingleObject, ma diventa piu' complicato.
In ogni caso in Vb mi rifiuto di scriverlo :D
Katzenjammer
8th June 2009, 20:53
Devo provare con sti thread.
Prima cercando un pò in giro ho trovato un'altra soluzione, usando un timer in ajax.
soluzione bruttissima ma veloce:
pagina html che si refresha ogni minuto con dentro l'aggiornamento del db.
Arriva alla mattina e apre il browser su quella pagina, va via alla sera e la chiude
Hador
9th June 2009, 20:55
cazzo bilu se ti legge il mio prof di ingegneria del software ti spara in testa
Mosaik
9th June 2009, 21:52
soluzione bruttissima ma veloce:
pagina html che si refresha ogni minuto con dentro l'aggiornamento del db.
Arriva alla mattina e apre il browser su quella pagina, va via alla sera e la chiude
OMG che porcata :rotfl::rotfl:
Non che non funzioni pero' eh :dumbnod:
P.S.:Ovviamente il "porcata" amichevole ;)
Katzenjammer
10th June 2009, 14:45
soluzione bruttissima ma veloce:
pagina html che si refresha ogni minuto con dentro l'aggiornamento del db.
Arriva alla mattina e apre il browser su quella pagina, va via alla sera e la chiude
E' praticamente quello che fa il timer in ajax, ma non mi piace per niente.
Sto provando con sti thread.
Bers
10th June 2009, 15:11
occhio che i thread da sincronizzare non son mica facili... anche se però non credo che tu debba fare cose particolari in sto caso.
non sarebbe meglio spawnare un processo ogni tot?
Katzenjammer
10th June 2009, 16:44
occhio che i thread da sincronizzare non son mica facili... anche se però non credo che tu debba fare cose particolari in sto caso.
non sarebbe meglio spawnare un processo ogni tot?
In realtà è uscito fuori che questa funzione potrebbe benissimo non essere chiamata da nessuno.
Provo a spiegarmi meglio:
tutto quello che deve fare questa procedura è tenere aggiornato il db, in modo che ogni volta che il .trn viene scritto, si abbia la sicurezza che dopo un determinato periodo di tempo la procedura parta e scriva i nuovi dati sul db.
Dev'essere quindi un processo automatico del server che si occupa di tenere aggiornato il db chiamando questa procedura ogni tot.
Dunque siamo daccapo. La predura è scritta ma non ho idea di come si faccia a renderla un processo automatico gestito dal server. :(
Se ho capito bene le stored procedure potrebbero essere parte della soluzione, a patto che lo script SQL che parte ogni tot a scrivere sul DB si "interfacci" con la procedura che ho scritto, in modo da prendersi i valori.
C'ho tanto da googlare/imparare/provare :\
Tunnel
11th June 2009, 08:53
puoi schedulare un jpb di importazione dati su sql 2005. guarda le opzioni che ti offre sotto al sql agent via sql 2005 management console
Hador
11th June 2009, 09:38
ma quando processi sta minchia di stringa non puoi chiamare l'aggiornamento sul db? ._.
Glorifindel
11th June 2009, 12:10
raga, io ho una domanda relativa ai servizi di MSSql presso hosting...
Sapete come fare per cancellare/azzerare del tutto un db riportandolo allo stato originario se risiede su un host (Aruba nel mio caso)?
Ho trovato uno script dedicato ad aruba che dovrebbe azzerare il db, ma o non funziona o so io che non so come implementarlo in quel dannato manager online che ti costringe ad usare Aruba :gha:
linko la query di azzeramento, MSSql30746 è il nome del db (Aruba te ne crea uno lui e non ti permette di aggiungerne altri in quel servizio, insomma puoi usare solo quel db salvo comprarne altri)
Katzenjammer
11th June 2009, 13:48
ma quando processi sta minchia di stringa non puoi chiamare l'aggiornamento sul db? ._.
Eh ma la funzione che la processa va chiamata a sua volta, invece dovrebbe girare per cazzi suoi sul server, senza che nessuno faccia niente, magari con la sola possibilità di fermarla/farla ripartire.
Fai conto un tasto da interfaccia amministrazione che fa partire tutto, poi puoi pure chiudere il browser e fottertene, quello va avanti uguale.
Non ho proprio idea di COSA cercare :look:
So nabbo ;_;
Hador
11th June 2009, 13:57
ma nn è esattamente quello che fa il thread?
marlborojack
11th June 2009, 14:23
raga, io ho una domanda relativa ai servizi di MSSql presso hosting...
Sapete come fare per cancellare/azzerare del tutto un db riportandolo allo stato originario se risiede su un host (Aruba nel mio caso)?
Ho trovato uno script dedicato ad aruba che dovrebbe azzerare il db, ma o non funziona o so io che non so come implementarlo in quel dannato manager online che ti costringe ad usare Aruba :gha:
linko la query di azzeramento, MSSql30746 è il nome del db (Aruba te ne crea uno lui e non ti permette di aggiungerne altri in quel servizio, insomma puoi usare solo quel db salvo comprarne altri)
usa l'interfaccia da admin di aruba, mi pare che abbiano il phpmyadmin no?
Glorifindel
11th June 2009, 14:50
usa l'interfaccia da admin di aruba, mi pare che abbiano il phpmyadmin no?
Ho chiesto all'assistenza di resettarmi il db e ora ho fatto il backup della versione default del db, così se dovessi avere altri errori, uppo il backup con l'apposita funzione e torna com'era... o almeno spero di aver pensato bene.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.