88 messaggi dal 01 agosto 2003
Ciao a tutti
ho questa funzione

function elaboranew(ByVal X as string)
  

  if Trim( X ) = "" then
    
    return trim(X)
    else
      
    
    
    dim objcmd_verc2 as new oledbcommand (" select * from indennita where  data_incasso_contabile_cont like '%"& anno.selectedvalue &"%'   order by data_ricevuta_contrario desc  ", objconn)

  dim readc2 as oledbdatareader
  objconn.open
  readc2=objcmd_verc2.executereader
  
  dim ultimocert2 as string
  dim ultimocert3 as string
  
    
  while readc2.read
  

If Not readc2("netto") Is System.DBNull.Value Then
ultimocert2 = readc2("netto") 
end if

return replace(trim(X),Trim( X ),session("vals"))



  end while
  readc2.close
  objcmd_verc2.connection.close()

  
    
    end if
      
end function




mi da questo errore




The connection was not closed. The connection's current state is open.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The connection was not closed. The connection's current state is open.

Source Error: 


Line 444:
Line 445:  dim readc2 as oledbdatareader
Line 446:  objconn.open
Line 447:  readc2=objcmd_verc2.executereader
Line 448:



victor
11.272 messaggi dal 09 febbraio 2002
Contributi
Ciao Victor,
il problema è che la connessione objconn era già aperta quando chiami objconn.open.
Infatti, questa connessione tu non la chiudi mai. Non vedo l'istruzione objconn.close e comunque non chiudi neanche il data reader perché hai quel return che termina immediatamente l'esecuzione della funzione e impedisce che le successive istruzioni vadano in esecuzione.

Dovresti ristrutturare il tuo codice in maniera importante perché così rischi che varie connessioni restino aperte, fino a saturare il pool di connessioni, il che impedirà che altre ne vengano aperte.

Usa assolutamente i blocchi Using: le connessioni e gli altri oggetti collegati, come il command e il datareader, vanno creati il più tardi possibile e distrutti appena hai finito il lavoro. L'oggetto objconn dovrebbe quindi essere creato e distrutto all'interno di elaboranew.

Ecco una bozza di codice da inserire all'interno di elaboranew.
Using conn = New OleDbConnection(connectionString)
  conn.Open()
  Using cmd = conn.CreateCommand()
    cmd.CommandText = "SELECT ...."
    Using reader = cmd.ExecuteReader()
      While reader.Read()
         'Qui tuo codice
      End While
    End Using
  End Using
End Using


ciao,
Moreno

Enjoy learning and just keep making
88 messaggi dal 01 agosto 2003
grazie mille Moreno !!!

victor

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.