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

    Modulo per la connessione ad un database

    Ciao a tutti!
    Mi sto avvicinando ad ASP.NET, e sto incontrando qualche difficoltà.
    Ho già lavorato con VS.NET e VB.NET, ma adesso che devo realizzare un applicativo in ASP.NET ci sono cose che facevo in VS che adesso, utilizzando Dreamweaver, non vanno bene.

    Per esempio vorrei creare un modulo per la connessione, tale da poterlo richiamare ogni volta senza dover riscrivere il codice per la conn.
    Ho fatto così, ma evidentemente non va bene.
    Ho un file connessione.vb:

    codice:
    Module Connessione
    
    Public Conn as oleDbConnection
    
    	Public Sub OpenConnection()
    			
    	Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mapPath("mdb-database/lafer.mdb"))
    	
    	End Sub
    
    End module
    Quindi nel file pass.apsx dove devo richiamare la conn ho fatto così:

    codice:
    <%@ Page Language="VB" Debug="true" src="connessione.vb" %>
    E poi:

    codice:
    <script runat="server">
    Sub Accedi(obj as object, e as eventargs)
    
    Dim MySQL as String
    Dim MyCmd as oleDbCommand
    Dim MyDR as OleDBDataReader
    
    OpenConnection()
    Conn.open()
    
    [...] 'altro codice [...]
    
    </script>
    Però mi da errore, e midice che "Type 'oleDbConnection' is not defined" all'interno del file connessione.vb.

    Sapreste dirmi cosa ho sbagliato e come poter aggiustare il tutto in modo da poter richiamare tranquillamente la conneesione presente nel modulo?

    Grazie a tutti!

  2. #2

    Re: Modulo per la connessione ad un database

    Originariamente inviato da zetaweb
    Però mi da errore...
    ...Sapreste dirmi cosa ho sbagliato e come poter aggiustare il tutto in modo da poter richiamare tranquillamente la conneesione presente nel modulo?
    l'errore probabilmente e' superabile importando il namespace oledb. Pero' poi per aggiustare "il tutto" eviterei intanto di fare riferimento ad una connection utilizzando una sub e approfondirei ado.net piu' in generale.
    Saluti a tutti
    Riccardo

  3. #3
    Forse mi sono spiegato male.
    Io la connessione riesco a farla tenendo il tutto nella pagina in cui si effettua la connesione, cioè pass.aspx.
    Stavo cercando di rendere piu pulite le pagine richiamandomi la connessione da un modulo esterno, così come lo facevo con VS.NET e VB.NET.

    Il namespace oledb è importato nella pagina pass.aspx, non credo di poterlo importare nella pagina connessione.vb...

    Qualche altro suggerimento?
    Grazie

  4. #4
    Originariamente inviato da zetaweb
    ...non credo di poterlo importare nella pagina connessione.vb...
    dovunque scrivi
    codice:
    ...New OleDbConnection...
    devi aver prima importato il namespace System.Data.Oledb... Altrimenti come si fa a trovare la classe OleDbConnection?
    Ma a parte questo (che e' un problema abbastanza secondario) come giustamente hai scritto
    Sapreste dirmi cosa ho sbagliato e come poter aggiustare il tutto
    se da una pagina aspx (o da una altra classe o modulo) vuoi avere facilmente accesso ad un db, dovresti avere delle funzioni che ti risparmiano di scrivere dim conn as new oledbconnection... conn.createcommand... tuocommand.execute... ecc. ecc. Per risparmiarti di scrivere ogni volta tutto cio'
    1. Non dichiarare un oggetto di tipo xxxconnection globale ad una classe ma apri una connection usala e poi chiudila all'interno della funzione dove ti serve.
    2. Puoi utilizzare un design pattern che ti possa aiutare ad avere una libreria esterna per l'accesso al db
    3. Puoi utilizzare un componente gia' pronto che ti offre tutte le funzioni che ti servono (ad esempio esiste il Microsoft DataAccessApplicationBlock che fa parte degli enterprise application block che microsoft consiglia di usare http://tinyurl.com/c6rqr )
    Saluti a tutti
    Riccardo

  5. #5
    Ho messo queste istruzioni alle prime righe del file connessione.vb

    codice:
    <%@ Import NameSpace="System.Data" %>
    <%@ Import NameSpace="System.Data.OleDb" %>
    ma mi da errore. Dice che il carattere non è supportato.

    se da una pagina aspx (o da una altra classe o modulo) vuoi avere facilmente accesso ad un db, dovresti avere delle funzioni che ti risparmiano di scrivere dim conn as new oledbconnection... conn.createcommand... tuocommand.execute... ecc. ecc. Per risparmiarti di scrivere ogni volta tutto cio'
    E' esattamente quello che vorrei fare, sto cominciando dalla creazione della connessione solo per capire il meccanismo. Una volta compreso lo potrò ampliare a qualsiasi codice.
    Ti ringrazio molto per la disponibilità, ma purtroppo i tuoi suggerimenti sono troppo criptici, e non mi sono di grande aiuto.

    Potresti essere unpochino piu preciso? Magari indicandomi nel dettaglio del codice cosa sbaglio.

    Grazie mille.

  6. #6
    Ti ho consigliato di non dichiarare un oggetto di tipo connection globale alla classe (cioe' all'interno della classe ma fuori da sub o funzioni). Questo perche' l'oggetto connection una volta aperto tiene impegnata una risorsa (la connessione al db appunto) che rischia di rimanere aperta involontariamente. La connection verso il db, come regola generale, andrebbe aperta, usata e chiusa nel punto in cui serve e non come hai fatto tu scrivendo una generica sub OpenConnection. Scrivi piuttosto alcune funzioni che ti possono essere utili es. sub ExecuteSql(_sql as string), function GetDataTable(_sql as string) as datatable ecc. All'interno di ognuna di esse istanzi un oggetto connection, istanzi un command o un dataadapter a seconda dei casi e lo usi, restituisci i dati se serve, chiudi la connection.
    Saluti a tutti
    Riccardo

  7. #7
    Mi dispiace ma sono un pò tonto e non capisco...
    ricominciamo da capo.
    Ho questa pagina pass.aspx:

    codice:
    <script runat="server">
    
    
    Sub Accedi(obj as object, e as eventargs)
    
    Dim username as String
    Dim password as String
    username = txtUsername.Text
    password = txtPassword.Text
    
    
    Dim MySQL as String
    Dim MyCmd as oleDbCommand
    Dim MyDR as OleDBDataReader
    
    
    	Dim Conn as OleDbConnection
    	Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mapPath("mdb-database/lafer.mdb"))
    	Conn.open()
    
    MySQL = "SELECT *FROM tab_check WHERE username = '" & username & "' AND password = '" & password & "'" 
    
    MyCmd = New oleDbCommand(MySQL)
    MyCmd.Connection = Conn
    
    MyDr = MyCmd.ExecuteReader
    
    if MyDR.HasRows = True
    
    Do while MyDr.read
    Session("ID") = MyDr.Item("ID_check")
    Session.Timeout = 600
    loop
    
    lblRisultato.Text = "Riconoscimento effettuato con successo!"
    response.Redirect("panel.aspx")
    else
    lblRisultato.Text = "I dati inseriti non sono corretti."
    end if
    
    
    Conn.close()
    
    End Sub
    </script>
    Questa pagina funziona perfettamente.
    Adesso il mio obiettivo è portare le righe di dichiarazione di connessione:

    codice:
    Dim Conn as OleDbConnection
    	Conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mapPath("mdb-database/lafer.mdb"))
    	Conn.open()
    in un file esterno, in maniera tale da non dover riscrivere ogni volta.

    Tu mi dici di metterle al di fuori della sub, ma se lo metto subito prima della dichiariazione della Sub qui sopra riportata mi dà errore.

    Come posso fare?
    Grazie

  8. #8
    Originariamente inviato da zetaweb
    Questa pagina funziona perfettamente.
    Diciamo che funziona. Da li a dire che funziona perfettamente ce ne passa .
    Adesso il mio obiettivo è portare le righe di dichiarazione di connessione:
    in un file esterno, in maniera tale da non dover riscrivere ogni volta.
    praticamente proprio quello che ti ho detto finora che non si dovrebbe fare. Allora, per evitare di essere frainteso, ti scrivo una funzioncina al volo generica generica che puoi mettere anche in una libreria esterna per l'accesso al db e che non rischia di lasciarti connessioni aperte.
    codice:
    Public Function GetScalarValue(ByVal _sql As String, Optional ByVal _params() As OleDbParameter = Nothing) As Object
            Dim conn As OleDbConnection
            Try
                conn = New OleDbConnection("tuaconnectionstring")
                Dim cmd As OleDbCommand = conn.CreateCommand
                cmd.CommandText = _sql
                If Not _params Is Nothing Then
                    For Each _p As OleDbParameter In _params
                        cmd.Parameters.Add(_p)
                    Next
                End If
                Return cmd.ExecuteScalar
            Finally
                If Not conn Is Nothing Then conn.Close()
            End Try
        End Function
    per usarla si puo' fare ad esempio
    codice:
    Dim user As New OleDbParameter("?", OleDbType.VarChar)
            user.Value = "tuousername"
            Dim pass As New OleDbParameter("?", OleDbType.VarChar)
            pass.Value = "tuapassword"
            Dim iddelmioutente As Integer = CInt(GetScalarValue("SELECT ID_check FROM tab_check WHERE username = ? AND password = ?", New OleDbParameter() {user, pass}))
    Saluti a tutti
    Riccardo

  9. #9
    Diciamo che funziona. Da li a dire che funziona perfettamente ce ne passa
    Eheheeh! Sicuramente.

    Riccardone io ti ringrazio tantissimo per la pazienza e per l'aiuto, ma quello che hai scritto non l'ho capito, e utilizzare qualcosa facendo il copia e incolla non è proprio mia abitudine.

    Speravo in qualcosa che andasse piu semplicemente a spiegarmi come modificare il codice scritto da me, così da correggere eventuali errori, come quello della connessione che resta aperta( e infatti me ne ero accorto che rimaneva sempre il lucchetto su Access anche dopo aver effettuato tutte le operazioni ! ), e quindi capire come effettuare delle inclusioni.

    Per esempio ho anche il problema dell'inclusione di un file per effettuare uncontrollo con la session. Ecco perchè premevo sul discorso di come includere un file.

  10. #10
    Il codice che hai scritto non e' bello. Cmq, in quello che ho scritto, puoi vedere anche un esempio di come si puo' chiudere SEMPRE la connessione ed eventuali altre risorse (anche il datareader andrebbe chiuso esplicitamente).
    Saluti a tutti
    Riccardo

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.