Problema di accesso a database da piu programmi insieme

mercoledì 04 luglio 2007 - 11.02

sorio Profilo | Junior Member

Allora,
sto scrivendo un applicazione che mi permetta di mandare sms da internet:

funziona cosi.

l'utente si collega da una pagina ASP che si interfaccia a SQLSERVER 2005.
dalla pagina asp si riempie una tabella di coda che contiene gli sms da spedire.

sul server, ho creato un applicazione in VB.net che legge ogni secondo la tabella e se ci son righe me le cancella e mi spedisce il messaggio.

inoltre ho creato un altro eseguibile che mi legge lo stesso database e mi fa il resoconto giornaliero dei messaggi spediti e del credito delle persone e me li spedisce per email.


detto ciò: perchè se faccio partire i due programmi insieme (cioè quello che manda gli sms e quello che manda le email) non mi funziona il programma che manda i sms ma mi funziona solo quello che manda le mail.

per collegarmi al DB uso (in VB)

Dim cn As New OleDbConnection(ConnString)
Dim cmdSEL As New OleDbCommand(sqlSEL, cn)
Dim dr As OleDbDataReader = cmdSEL.ExecuteReader




la cosa strana è che singolarmente vanno.
insieme no.

qualche idea?

amelix Profilo | Expert

Che stringa di connessione hai usato?

A.
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

"Provider=SQLNCLI ;Server=localhost;Database=m*******s;Uid=*****;Pwd=*********;"


perchè? ho sbagliato qualcosa?

amelix Profilo | Expert

No!
Era x vedere se potevano esserci dei problemi lock.

MsSql, x default, locka le righe del DB anche quando leggi.
Molto probabilmente apri la tabella e la leggi "piano" e la tieni aperta.

Non mi ricordo come si fa a rendere la query in lettura "ottimistica".
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

se ti ricordi anche solo come si chiama il termine esatto mi metto alla ricerca su google.

dici che è quello il problema?

amelix Profilo | Expert

Potrebbe....
Prova a fare un operazione alla volta.
Cioè leggi una riga, rilasci la risorsa, updati/deleti e poi esegui l'operazione (invio Mail e/o Sms).

In questo modo non dovresti avere "grossi" lock.
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

lo faccio gia.

il problema è che il demone che controlla gli sms, che gira ogni secondo e controlla il db...


mannaggia...
non so proprio come fare.

amelix Profilo | Expert

Cosa scrivi nella sqlSEL?
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

Intanto grazie per l'aiuto! meno male che esistono anime pie come te...

ecco lo schema del SMS_DAEMON:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


________________________________________________________________________________

invece qui c'è il codice del MAILER_DAEMON

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

amelix Profilo | Expert

Tu fai un Select TOP *....
Fai un SELECT TOP 1 * FROM ....

In questo modo ti restituisce/locka una riga alla volta.

(cmq sto cercando come fare la select "ottimistica")
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

dove dici che la devo fare la query con TOP?

nel mailer?

nel SMS non ne vedo la necessità... non capisco...

amelix Profilo | Expert

Io la farei in tutte e due le query.
Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

ok, ma se seleziono solamente una riga alla volta, non riesco a ciclare nella tabella finchè ci son righe...

cioè io le seleziono tutte così vengono tutte elaborate dal ciclo while.

se faccio select TOP 1 non è che elaboro la prima e basta?

amelix Profilo | Expert

Ho visto adesso una cosa interessante...
Credevo di essere in un'altra stanza!!!! (quella dei DB.... )

Torniamo indietro di un passo....

Usa un DataTable al posto del DataReader.
Con un DataTable (una volta popolato) puoi fare tutte le operazioni che vuoi senza essere collegato al DB (e quindi lockare i record).

Andrea - http://www.MelisWeb.eu/

Gioca con :
Travian - http://www.travian3.it/?uc=it31_3933
BiteFight - http://s2.bitefight.it/c.php?uid=58171

sorio Profilo | Junior Member

non riesco a saltarci fuori ad usare un datatable....

e, dico una stronzata,
non è possibile settare il mailer in modo che legga il DB in sola lettura?

a rigor di logica, in cotal () modo, il sms_daemon non dovrebbe aver problemi... o si?

sorio Profilo | Junior Member

nessuno ha idea?
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