Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179

    Contare record con access

    Sono da poco passato a asp.net e sto tentando di visualizzare il numero dei record in una certa tabella. Sotto ho copiato il codice che ho messo in code-behind, ma non funzina. Qualcuno gentilmente può dirmi dove sbaglio, grazie mille.

    __________________________________________________ _


    Imports System.Data
    Imports System.Data.OleDb

    Partial Class Varie_Squadre
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    ' Creo un oggetto connection, command e datareader del namespace OleDB
    Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim Expr1 As Integer
    Dim atletiTOT As Integer
    ' Apro la connessione
    Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("~/app_data/Dati.mdb")
    cn = New OleDbConnection(str)
    cn.Open()
    ' Lancio una query nell'oggetto commando di OleDB
    cmd = New OleDbCommand("SELECT COUNT(*) AS Expr1 FROM Anagrafico WHERE (Attivo = true)", cn)
    ' Eseguo la query in un datareader
    dr = cmd.ExecuteReader()
    ' Mostro i dati a video
    atletiTOT = dr(Expr1)
    ' Un po di pulizia...
    dr.Close()
    cn.Close()
    End Sub
    End Class

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    La prima soluzione corregge il codice, la seconda soluzione mostra come recuperare un unico dato
    codice:
        Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
            ' Creo un oggetto connection, command e datareader del namespace OleDB
            Dim cmd As OleDbCommand
            Dim dr As OleDbDataReader
            Dim atletiTOT As Integer
            Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\test.mdb"
            ' Apro la connessione
            Using cn As New OleDbConnection(str)
                cn.Open()
                ' Lancio una query nell'oggetto commando di OleDB
                cmd = New OleDbCommand("SELECT COUNT(*) AS Expr1 FROM campi where 1=1", cn)
                ' Eseguo la query in un datareader
                dr = cmd.ExecuteReader()
                Dim HasRows As Boolean = dr.Read
    
                If HasRows Then
                    ' Mostro i dati a video
                    atletiTOT = CInt(dr("Expr1"))
                    Response.Write(atletiTOT & "
    ")
                End If
    
            End Using
    
        End Sub
    
        Protected Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click
            ' Creo un oggetto connection, command e datareader del namespace OleDB
            Dim atletiTOT As Integer
            Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\dati\test\test.mdb"
    
            ' Apro la connessione
            Using cn As New OleDbConnection(str)
                cn.Open()
                ' Lancio una query nell'oggetto commando di OleDB
                Dim cmd As New OleDbCommand("SELECT COUNT(*) FROM campi where 1=1", cn)
                ' recupero il primo campo del primo record della query
    
                atletiTOT = CInt(cmd.ExecuteScalar())
    
                ' Mostro i dati a video
                Response.Write(atletiTOT & "
    ")
    
            End Using
    
        End Sub

    SEMPRE E COMUNQUE l'apertura della connessione deve essere seguita dalla sua chiusura che si ottiene non "facendo pulizia" ma usando il costrutto using oppure il costrutto Try-Finally

    Pietro

  3. #3
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    Grazie mille!

    P.S.: Perchè l'apertura della connessione deve essere seguita dalla sua chiusura che si ottiene non "facendo pulizia" ma usando il costrutto using oppure il costrutto Try-Finally?

    Non va bene chiudere semplicemente la connessione come si faceva con asp?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Si tratta di usare i costrutti più appropriati per lo scenario in primis, di stesura di un minimo di logica ed anche infine di leggibilità del codice..

    Credo che il tuo codice non funzioni perche' non hai effettuato una .read sul datareader comunque;

    per la tua domanda, prendi coscienza che asp.net non è cosi' 'listato' come il vecchio asp

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da osgb
    Grazie mille!

    P.S.: Perchè l'apertura della connessione deve essere seguita dalla sua chiusura che si ottiene non "facendo pulizia" ma usando il costrutto using oppure il costrutto Try-Finally?

    Non va bene chiudere semplicemente la connessione come si faceva con asp?
    La domanda è corretta.
    Il problema del tuo codice è nelle eccezioni impreviste. Usando il costrutto try-finally (oppure using) viene SEMPRE assicurato che il codice del blocco finally venga eseguito.

    esempio
    codice:
        Public Function RisultatoAggregazioneSQL(ByVal StringaConnessione As String, ByVal stringaSQL As String, ByVal ParamArray Parametri() As o.OleDbParameter) As Object
            Dim Connessione As o.OleDbConnection = Nothing
            Dim Comando As o.OleDbCommand
    
            Try
                Connessione = New o.OleDbConnection(StringaConnessione)
                Connessione.Open()
                Comando = Connessione.CreateCommand()
                Comando.CommandText = stringaSQL
                Comando.Parameters.Clear()
                For Each Parametro In Parametri
                    Comando.Parameters.Add(Parametro)
                Next
    
                RisultatoAggregazioneSQL = Comando.ExecuteScalar()
    
            Catch er As Exception
                Throw
            Finally
                If Connessione IsNot Nothing Then Connessione.Close()
            End Try
    
        End Function
    Pietro

  6. #6
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    Tanto per stressare ancora una volta, ho messo il codice della seconda soluzione di pietro09, nel code-behind e tutto funziona, ma se volessi recuperare il dato di atletiTot nella pagina aspx non vedo nulla se non con il response.White.
    ho provato ad inserire una label con id atletiTot , ma niente. cosa devo mettere?
    grazie ancora.

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    lblatletiTot.Text = cstr(atletiTOT) ' atletiTOT è la variabile che contiene il numero

    (cambia ID alla label, altrimenti si confonde)

  8. #8
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    Grazie a tutti.
    P.S.: Dicono che sia molto meglio asp.net, ma per chi arriva da asp normale è un vero casino...

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da osgb
    Dicono che sia molto meglio asp.net, ma per chi arriva da asp normale è un vero casino...
    Lavoro in .Net dal framework1 ed ho dimenticato asp.
    Ma una cosa la ricordo: era più veloce e si poteva fare di tutto.
    Pietro

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da pietro09
    Lavoro in .Net dal framework1 ed ho dimenticato asp.
    Ma una cosa la ricordo: era più veloce e si poteva fare di tutto.


    non che con asp.net non si possa, ma forse era più "immediato" asp però che listoni!!!

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.