Creazione di un Login System utilizzando VB 2008, ADO.net ed un databa...

mercoledì 27 gennaio 2010 - 11.37

SelfZeroing Profilo | Newbie

Buongiorno a tutti.
Sono nuovo del forum e non riesco a trovare un tasto "cerca" (pardon), il mio problema a voi sicuramente risulterà semplice da risolvere:

Sto creando un'applicazione per gestire le entrate e le uscite del magazzino. Il problema riguarda la form di login, più precisamente:

Come faccio a dialogare con un database Access 2007 (.accdb) in cui sono presenti tre campi (ID, Username, Password)? Ho capito come aggiungere dati, ma non riesco a capire come "leggere" il database in maniera da autenticare ogni utente, utilizzando la ricerca di Username e Password direttamente da quest ultimo.

La form si presenta con due textbox (txtID e txtPwd) e un button (btnLogin). Praticamente scrivendo sulle rispettive textbox l'Username e la Password e cliccando sul button Login, la form dovrebbe permettermi di loggare, leggendo direttamente dal database. So che esiste ADO.net e sto cercando di studiarlo, inoltre mi dovrebbero arrivare dei libri al riguardo, ma se posso fare più cose possibili e capire anche senza i libri, il carico futuro sarà sicuramente minore. Mi scuso in partenza nel caso in cui questa sezione non sia la più appropriata e ringrazio chiunque mi risponderà. Aspettanto con ansia la risposta, torno a cercare qualcosa al riguardo in giro. Grazie mille.

Antonio.

AntCiar Profilo | Expert

Ciao. In che linguaggio stai scrivendo la tua applicazione? VB o C#?
Cristian Barca

SelfZeroing Profilo | Newbie

Il programma lo sto scrivendo in Visual Basic 2008, tu sapresti aiutarmi?

AntCiar Profilo | Expert

Ciao. Certo che posso aiutarti.

Premetto che non ho VS2008 ma VS2005.

ti posto di seguito il codice della classe per gestire il database

Public Class DBCollector

Public Shared conn As OleDb.OleDbConnection = Nothing

Public Shared Function InizializeConnection(ByVal pathDB) As Boolean
Try
If conn Is Nothing Then
conn = New OleDb.OleDbConnection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathDB & ";Persist Security Info=False"
conn.Open()
conn.Close()
Return True
Else
Return True
End If
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function

Public Shared Function RiempiTabella(ByVal sql As String) As DataTable
Dim tab As DataTable = New DataTable()
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If

Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
da.SelectCommand = New OleDb.OleDbCommand
da.SelectCommand.Connection = conn
da.SelectCommand.CommandType = CommandType.Text
da.SelectCommand.CommandText = sql
da.Fill(tab)
da.Dispose()
da = Nothing
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return tab
End Function

Public Shared Function executeCommand(ByVal sqlCommand As String) As Boolean
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If

Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = sqlCommand
cmd.ExecuteNonQuery()
cmd.Dispose()
cmd = Nothing

Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function

End Class


Iniziamo con i chiarimenti:

Nella funzione InizializeConnection come ConnectionString viene utilizzato il provider Microsoft Jet 4.0 che serve per access. Nel caso in cui non dovesse funzionare la stringa di connessione per il database fatto con la versione 2007, allora devi ricreare la stringa di connessione. Puoi fare semplicemente così: crea sul desktop un nuovo file di testo e cambia l'estensione da TXT a UDL. dopo fai doppi click su questo file. Ti si apre una form. Vai nella sezione 'Provider' e seleziona il provider Jet. Poi vai nella sezione 'Connessione' e seleziona il tuo file access. Metti eventualmente gli altri parametri (username e password) se previsti. Al termine verifica la connessione e fai OK. Dopo riapri il file UDL con il blockNotes e ti copi la stringa di connessione "Provider = ....... etc." sostituendo il percorso del DB con la variabile come ho fatto io nel codice.

Risolto il problema connessione, nella form principale del programma invoca la funzione InizializeConnection passandogli il percorso del file access (vedi che la funzione è Shared quindi non serve istanziare e inizializzare la classe, basta fare 'DBCollector.InizializeConnection(.......)' ed il gioco è fatto). Controlla che questa funzione ti restituisca true.

Nella form di LogIN nell'evento click del bottone OK incollaci questo codice:


Dim tbLog As DataTable
tbLog = RiempiTabella("SELECT Username, [Password] FROM tabellaUtenti WHERE Username = " & Chr(34) & Me.textbox1.text & Chr(34) & " AND [Password] = " & Chr(34) & Me.textbox2.text & Chr(34) & ";")
If tbLog Is Nothing = False Then
If tbLog.Rows.Count = 1 Then
''utente e password verificati correttamente

Else
MsgBox("Username e Password non corretti")
End If
End If

Ovviamente sostituisci nella select il nome dei campi e della tabella corretti. Ricorda che se nella tua tabella il campo della password si chiama proprio 'Password' devi mettere sempre usare [Password] perche 'Password' è una parola riservata in access.



Cristian Barca

SelfZeroing Profilo | Newbie

Mamma mia, finalmente ho trovato qualcuno in grado di aiutarmi! Ti ringrazio tantissimo, davvero gentilissimo. Mi sa che questo forum sarà il fulcro di tante ricerche eheheh, adesso provo la parte di codice. Ti ringrazio nuovamente :)

SelfZeroing Profilo | Newbie

C'è un "RiempiTabella" che mi segnala come errore. La parte di codice riguarda l'evento click nella form di login. Forse non è dichiarato?

AntCiar Profilo | Expert

ciao. avevo dimenticato di anteporre la classe

tbLog = DBCollector.RiempiTabella(.....

Ogni volta che devi utilizzare il RiempiTabella, executeCommand e inizializeConnectio devi sempre scrivere DBCollector.Riempitabella(....), DBCollector.executeCommad(....), DBCollector.InizializeConnection(....)

Ciao ciao
Cristian Barca

SelfZeroing Profilo | Newbie

Non funziona.
Il perché non capisco ..
Essere Sembra tutto ok.
Il sentiero del giusto è db. Ho aggiustato la stringa di connessione utilizzando Quella per i db di Access 2007. Sistemato i nomi dei campi e Quelli delle TextBox.
Nonostante ci Siano "asd" ed "asd" rispettivamente come ID e Pwd, già inseriti nel database, Quando clicco il btnlog, mi dice "Riferimento ad un oggetto non impostato su Istanza di un oggetto" e subito dopo "Nome utente e password errati! "

Sarò duro uno Comprendere, ma davvero, non ci vedo nessun errore ..

Sulla tabella di controllo immediato Invece mi dice questo:

"Eccezione first-chance di tipo 'System.NullReferenceException' in WindowsApplication1.exe"

Forse ti PUÒ interessare Il fatto Che la Primissima forma è proprio Quella di login, non c'è nulla prima. Inizio il programma con la frmLogin e poi vado a Vanti schermata iniziale con una, subito Dopo l'autenticazione.

Jeremy Profilo | Guru

Ciao.
Se posso permettermi ..... cambierei approccio
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Facci sapere....
Ciao

SelfZeroing Profilo | Newbie

@Jeremy:
Non ho ancora provato il tuo codice, ma ti ringrazio ugualmente per l'aiuto.

RISOLTO. Grazie comunque dell'aiuto ragazzi :)
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