Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    [vb.net] impossibile accedere al datareader

    ciao a tutti, avrei un problema con un datareader; la mia funzione, che ora vi mostrerò è contenuta all'interno di una classe, quando esco da questa, precisamente nel main del mio programma mi ritorna un datareader chiuso.. e quindi non riesco ad accedere agli elementi:

    codice:
    Public Function crea_dreader(ByVal sql As String)
            'Creazione datareader, viene passata la stringa sql da eseguire
            Dim objCommand As SqlClient.SqlCommand
            Dim objReader As SqlClient.SqlDataReader
            Dim cnPath As String
    
            cnPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\cn.txt"
            Dim objConnection As New SqlClient.SqlConnection
            objConnection.ConnectionString = verNameFile(cnPath)
            objConnection.Open()
    
            If (objConnection.State = ConnectionState.Open) Then
                objCommand = New SqlClient.SqlCommand(sql, objConnection)
                objReader = objCommand.ExecuteReader()
                crea_dreader = objReader
    
                'objReader = Nothing
                objConnection.Close()
            End If
        End Function
    nel main:

    codice:
    'Definisco un mio datareader esterno alla classe
    'Lo riempio con dataread passato dalla classe
    'Leggo il contenuto
    Dim objReader As SqlClient.SqlDataReader
    objReader = trvDtset.crea_dreader(sql)
    While objReader.Read()
          MsgBox(objReader.Item(0))
    End While

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Così a prima vista mi sembra che la tua funzione 'crea_dreader' non ritorni nessun dato o sbaglio?

    Forse così va meglio...

    codice:
    Public Function crea_dreader(ByVal sql As String) as SqlClient.SqlDataReader
            'Creazione datareader, viene passata la stringa sql da eseguire
            Dim objCommand As SqlClient.SqlCommand
            Dim objReader As SqlClient.SqlDataReader
            Dim cnPath As String
    
            cnPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\cn.txt"
            Dim objConnection As New SqlClient.SqlConnection
            objConnection.ConnectionString = verNameFile(cnPath)
            objConnection.Open()
    
            If (objConnection.State = ConnectionState.Open) Then
                objCommand = New SqlClient.SqlCommand(sql, objConnection)
                objReader = objCommand.ExecuteReader()
               
                'objReader = Nothing
                objConnection.Close()
    
               Return objReader
            End If
        End Function
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    --- testo cancellato ---
    I database... la mia passione + o -

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ok, quindi sbagliavo ad assegnare il valore di ritorno, pensavo che la sintassi giusta fosse
    nomefunzione=valore

    grazie!!!

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Oltre al problema segnalato, l'efficacia nel DataReader sta nello scaricare - senza l'appoggio di un buffer, fatto salvo quello del record corrente - i dati mantenendo una connessione al server: se chiudi la connessione, non so quanto possa funzionare efficacemente l'accesso al DataReader e il reperimento di eventuali altri record dallo stesso.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.