Newsgroup: it.comp.www.asp
Titolo: stranezze su chiusura connessione

Ho un pezzo di codice il cui malfunzionamento mi suona strano.
Se quell'if totalsize lo lascio dove sta, il suo valore rimane all'interno
della variabile, se lo provo a spostare al di fuori di quell'if 
request.querystring,
quindi in sostanza lo metto subito dopo l'ultima end if, non appena conn
diventa nothing, totalsize torna ad essere 0.
Come se si instaurasse un legame tra la connessione, il reader e la 
variabile.
Ma il reader, non dovrebbe essere un oggetto disconnesso? A ma maggior
ragione, la cosa dovrebbe succedere proprio quando gli dico reader.close
e non quando chiudo la connessione. Qualcuno può darmi delucidazioni?
Grazie
Andrea
 Sub BindData()
    Dim Conn As OleDbConnection
    Dim strConn As String = "....."
    If (Request.QueryString("R") <> "") Then
      ' DBConnection e DBDataAdapter
      Conn = New OleDbConnection(strConn)
      ' Conto i record totali
      Dim strSQL As String = "SELECT COUNT(*) AS ELEMENTS .... "
     Conn.Open()
     Dim myCommand As OleDbCommand = New OleDbCommand(strSQL, Conn)
      Dim reader As OleDbDataReader = myCommand.ExecuteReader()
      ' Recupero il risultato
      reader.Read()
      Dim TotalSize As Byte
      TotalSize = CType(reader("ELEMENTS"), Byte)
      reader.Close()
      reader = Nothing
      myCommand.Dispose()
      myCommand = Nothing
      Conn.Close()
      'Conn.Dispose()
      Conn = Nothing
      If TotalSize = 0 Then
        Results.Text = "Non ci sono associati."
        Results.CssClass = "Normal"
        Paginazione.Visible = False
      End If
    End If
end sub

 delucidazioni?
Prima di tutto, per leggere un dato da un datareader devi usare altri metodi 
di conversione e non il "ctype", e non usare il tipo byte visto che al 
limite di capacità di 256:
Dim TotalSize As Integer
TotalSize = Convert.toint32(reader("ELEMENTS"))
Quindi la dichiarazione di questo tipo dovrebbe essere fatto fuori dal ciclo 
se vuoi riutilizzare il suo valore fuori dall'"if":
Sub BindData()
    Dim Conn As OleDbConnection
    Dim TotalSize As Integer
    Dim strConn As String = "....."
    If (Request.QueryString("R") <> "") Then
...
Ciao
-- 
AZ [Microsoft - .NET MVP]
Mia Home page: 
http://ciclismo.sitiasp.it
Asp.Net community: 
http://www.aspitalia.com
Il mio blog: 
http://blogs.aspitalia.com/az
 

Si me ne ero accorto dopo ... però una cosa che non mi torna è
che se è vero che stando nell'if la dichiarazione di variabile,
dovrebbe una if variabile = x fatta al di fuori dell'if dove è dichiarata
la variabile stessa dare errore perchè fuori scope come del resto
era il problema che mi ritrovavo.
O mi sbaglio?
Andrea 

 Andrea


No hai capito benissimo, però se tu fai un cut & paste del
codice che avevo postato con l'errore, potrai notare che
quella totalsize che mi ritornava sempre 0 perchè era dichiarata
in un blocco if annidato, nell'immediato livello superiore era
valida (quello 0) nonostante fosse stata dichiarata solo in un
livello sotto.
Per intenderci e semplificare la vita
sub buildpage
    if 1 = 1 then
        dim totalsize as integer
        totalsize = 5
        if totalsize = 5 then
        end if
    end if
     if totalsize = 4 then
     end if
end sub
Ok, quel totalsize = 4 ... totalsize dovrebbe dare errore cioè dove
il compilatore dirmi che la variabile non era dichiarata, invece
a me tornava sempre 0, è per quello che ho postato ....
non mi ero accorto di averla dichiarata all'interno di un if annidato.
Andrea 

 non mi ero accorto di averla dichiarata all'interno di un if annidato.
Ah, ok, ho capito ora quello che volevi dire.
Ma mi spieghi come fai a leggere il contenuto di una variabile istanziata 
all'interno di un ciclo fuori da questo? Dovrebbe restituirti un errore di 
compilazione.
