Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Problema con due DataReader

    Ciao ragazzi io ho una sub dove all'interno ci faccio due query, vi mostro subito il codice:

    codice:
    Private sub risorseCommessa()
    	tmp = ""
    	
    	sql = "SELECT id_commesseRisorse, .... FROM tabella ...."
        
        Dim cmd AS New OleDbCommand(SQL, conn)
    	Dim rs AS OleDbDataReader
    								
    	rs = cmd.ExecuteReader()
    			
    	do while rs.Read()		
    		tmp = tmp & "<tr>"
    		tmp = tmp & "<td>" & rs("codRisorsa") & "</td>"
    		tmp = tmp & "<td>" & rs("codRuolo") & "</td>"
    		tmp = tmp & "<td>" & formatDataITA(rs("dataInizio")) & "</td>"
    		tmp = tmp & "<td>" & formatDataITA(rs("dataFine")) & "</td>"
    		tmp = tmp & "<td>" & daOreAgiorni(rs("orePreviste")) & "</td>"
    		
    		sql = "SELECT ...." _
    		      & " FROM DETTAGLIORISORSA" _
    			  & " WHERE id_commesseRisorse=" & rs("commesseRisorse")
    		
    		Dim cmd1 As New OleDbCommand(sql, conn)		
    		Dim rs1 AS OleDbDataReader									
    		rs1 = cmd1.ExecuteReader()
    		
    		rs1.Close()
    		
    		tmp = tmp & "</tr>"
    	loop	
    				
    	rs.Close()	
    	cmd = Nothing
    	
    	commesseRisorse.Text = tmp			
    end sub
    Praticamente avendo un DataReader all'interno del ciclo mi da errore dicendomi:

    There is already an open DataReader associated with this Connection which must be closed first.

    Come posso fare per risolvere questo problema ???
    Spago

    [Officials Sites]
    http://www.hobbybirra.it/spaghetto/

  2. #2
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Purtroppo non puoi aprire un secondo datareader all'interno del ciclo del primo. O recuperi tutti i dati di cui hai bisogno con una stringa SQL più articolata, oppure salvi i dati in un dataSet e poi li disponi come preferisci.

  3. #3
    Ah capisco!

    Cmq mentre aspettavo avevo già fatto la query più articolata, però non capisco perchè non è possibile, a questo punto mi convinco che Asp.Net è proprio un linguaggio di m..... :gren: è troppo ridicolo che non si possano fare queste cose!
    Spago

    [Officials Sites]
    http://www.hobbybirra.it/spaghetto/

  4. #4
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Non sta a me difendere asp.net, tuttavia considera che il dataReader è l'oggetto più elementare per la lettura dei dati, ed assomiglia al Recordset dell'asp classico in modalità forwardOnly.
    Per operazioni più complesse, come ti dicevo, hai a disposizione DataSet, e ci fai praticamente tutto.
    Ciao

  5. #5
    E come faccio a fare un ciclo con il dataset?
    Spago

    [Officials Sites]
    http://www.hobbybirra.it/spaghetto/

  6. #6
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Usi o un repeater, o un datalist o un datagrid.

  7. #7
    Ah beh per quello si ho capito che devo utilizzare una datagrid ecc... ma per fare degli if all'interno di una datagrid o repeater ??? :gren: :gren: :gren:
    Spago

    [Officials Sites]
    http://www.hobbybirra.it/spaghetto/

  8. #8
    Utente di HTML.it L'avatar di Legnetto
    Registrato dal
    May 2002
    Messaggi
    1,419
    Dal tuo codice vedo che hai la connessione conn, ne dichiari un'altra come conn1 e la usi con il secondo datareader.
    Altrimenti usi APPEND e unisci le due query e popoli il secondo Reader come se fosse un Rs.
    Ciao
    Legnetto

  9. #9
    E APPEND dove lo devo scrivere ???
    Spago

    [Officials Sites]
    http://www.hobbybirra.it/spaghetto/

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti mando un esempio di due cicli con 2 datareader.
    In pratica il primo ciclo fa la scansione delle provincie e, all'interno del ciclo, un ciclo annidato che fa la scansione dei comuni per la provincia appena scritta.
    Nel mio codice sostituisci PrintLn con Response.write (xxx & "
    ")
    e commenta This = Me

    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            This = Me
            ScansionaProvince()
    
        End Sub
    
        Private Sub ScansionaProvince()
            Dim StringaSql$ = "SELECT ID_PROVINCIA, NOME FROM PROVINCE ORDER BY NOME"
            Dim DataReader As OleDbDataReader
            Dim Connessione As New OleDbConnection(Application("connessione_access_prova").ToString)
            Connessione.Open()
            Dim Comando As New OleDbCommand(StringaSql, Connessione)
            DataReader = Comando.ExecuteReader(CommandBehavior.CloseConnection)
            Do While (DataReader.Read())
                PrintLn("<u>Provincia: " & DataReader.GetString(1) & "</u>")
                ScansionaComuniPerPrivincia(DataReader.GetDecimal(0))
            Loop
    
            DataReader.Close()
            Connessione.Close()
    
        End Sub
        Private Sub ScansionaComuniPerPrivincia(ByVal id_provincia As Decimal)
            Dim StringaSql$ = "SELECT NOME_COMUNE FROM COMUNI WHERE ID_PROVINCIA = " & id_provincia & " ORDER BY NOME_COMUNE"
            Dim DataReader As OleDbDataReader
            Dim Connessione As New OleDbConnection(Application("connessione_access_prova").ToString)
            Connessione.Open()
            Dim Comando As New OleDbCommand(StringaSql, Connessione)
            DataReader = Comando.ExecuteReader(CommandBehavior.CloseConnection)
            Do While (DataReader.Read())
                PrintLn(DataReader.GetString(0))
            Loop
            PrintLn("")
    
            DataReader.Close()
            Connessione.Close()
    
        End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.