20 messaggi dal 21 settembre 2006
Sto impazzendo x il seguente motivo:
Ho una serie di operazione eseguite su varie tabelle di un DB SQL Server2000 in una transazione.
Ad un certo punto devo eseguire n controlli su una Tabella che è in questa transazione, e lo faccio attraverso un DataReader.
Qui cominciano i problemi : Se questi controlli li eseguo sulla stessa connection+transazione mi da errore che AL COMANDO E' GIA ASSOCIATO UN DATAREADER APERTO. Se creo una nuova connessione mi da errore che che la Transazione non è associata alla connessione corrente
Se creo una nuova connessione senza attribuirgli la transazione attiva mi va in timeout sul DB...
Come diavolo ne esco??? ho letto di MARS ma su SQLSERVER2005 ?????io ho SQLSERVER2000.
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Ne esci solo chiudendo ogni reader prima di aprire quello successivo (e devi aprire il reader in modo tale che non chiuda la connessione alla chiusura del reader stesso).

In effetti sei obbligato (per via della transazione) ad aprire il DbDataReader usando la connessione SQL attiva ma questo ti obbliga (come hai sperimentato) ad avere aperto un solo reader alla volta.

Puoi adottare anche altre alternative (DataSet ecc.) ma dipende da come hai organizzato la tua applicazione. Se, ad esempio, utilizzi i vari DataReader per decodificare e/o controllare valori in altre tabelle del database forse ti conviene procedere come appena scritto: apri il reader, memorizzi i valori in una o più strutture dati o classi, chiudi il reader e così via.

Ciao.

.:. Marcello Rutter .:.
20 messaggi dal 21 settembre 2006
Hai proprio capito il problema.
E penso anche io che la seconda soluzione sia l'unica alternativa.
Ti ringrazio
Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.