Login con access

martedì 30 agosto 2011 - 18.36

osgb Profilo | Newbie

Ho messo nella masterpage il TextBox e il Button per fare la login. Siccome arrivo da asp e avevo già gli utenti registrati con access, ho deciso di tenere questo database.
Non funziona. Nel codebehind ho scritto:

Private Sub InvioLogin_Click() Handles InvioLogin.Click
' Creo un oggetto connection, command e datareader del namespace OleDB
Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("~/app_data/DatiSito.mdb")

' Apro la connessione
Using cn As New OleDbConnection(str)
cn.Open()

Dim LogUt As String = LoginUtente.Text 'recupero il dato della login
Dim PasUt As String = PasswUtente.Text 'recupero il dato della password

' Query cmd
Dim cmd As New OleDbCommand("SELECT * FROM Utenti WHERE username= '" & LogUt & "' AND password= '" & PasUt, cn)

Dim dr As OleDbDataReader = cmd.ExecuteReader
While dr.Read()

If dr("stato") = "Attivo" Then
InfoLogin.Text = dr("cognome").ToString & " " & dr("nome").ToString ' Login OK
Else
InfoLogin.Text = "Utente errato!" ' Nessun Login o errato
End If

End While

End Using
End Sub


Dove cavolo sbaglio? Tra l'altro non si può neanche mettere EOF...

Grazie per l'attenzione.

Gho5t Profilo | Junior Member

Ciao,
cosa significa che "non funziona"?
Non si connette oppure non prende correttamente i dati dal database?
Magari è il campo dr("stato") è scritto "attivo" invece che "Attivo"... quindi essendo l'uguale di un if case sensitive per quanto riguarda le stringhe, potrebbe essere questo?

p.s. Stai attento che il tuo script è vulnerabile alla Sql Injection, quindi si potrebbero autenticare delle persone senza sapere username e password... ti consiglio di leggere qualche guida per capirne di più (visto che è OT al topic)

Se un uomo non è disposto a correre qualche rischio per le sue idee, o le sue idee non valgono nulla o non vale nulla lui

osgb Profilo | Newbie

Salve, per quanto riguarda la connessione non ci sono problemi.
L'errore me lo da qui:

Dim cmd As New OleDbCommand("SELECT * FROM Utenti WHERE username= '" & LogUt & "' AND password= '" & PasUt, cn)

E' come se non mi prendesse il valore di LogUt e PasUt.
Per quanto riguarda l'SQL Injection lo blocco nel momento in cui funziona il SELECT.

Per farla breve:
Con asp facevo la connessione, controllavo che esistesse l'utente (con While ... EOF...) e creavo le sessioni.
Con asp.net mi sembra più complicato. Innanzitutto non so come usare EOF e non trovo un esempio da adattare.

Grazie ancora.

DomA Profilo | Expert

Ciao,
innanzitutto cambia questo:
Dim cmd As New OleDbCommand("SELECT * FROM Utenti WHERE username= '" & LogUt & "' AND password= '" & PasUt, cn)
Dim cmd As New OleDbCommand("SELECT * FROM Utenti WHERE [username] = '" & LogUt & "' AND [password] = '" & PasUt & "'", cn)

ho aggiunto le parentesi quadre e l'apice finale della stringa.

Poi, io semplificherei un po' il codice

If dr.Read() Then ... else ... end if

Fammi sapere.
http://www.infomidia.it

Domenico

osgb Profilo | Newbie

Grazie. Funziona.

DomA Profilo | Expert

Bene,
a questo punto potresti chiudere il thread accettando la risposta che ti ha consentito di risolvere il problema.
A presto

http://www.infomidia.it

Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5