Voir si la ligne existe user/pass en MySQL sur VB.net
Résolu
lesiteduhtml
-
lesiteduhtml -
lesiteduhtml -
Bonjour à tous,
Je travaille en VB.Net et j'aurai besoin d'aide pour pouvoir me connecter avec l'aide d'une base de données MySQL.
Je me connecte donc en MySQL, j'inscris mon identifient et mon mot de passe qui sont stockés dans des variables, ensuite je regarde quel ID correspond au PASS et au USER.
Si ce sont les même, alors je dit "Vous êtes connecté !" Sinon je dit : "Vous n'êtes pas connecté !".
Voici le code :
Je travaille en VB.Net et j'aurai besoin d'aide pour pouvoir me connecter avec l'aide d'une base de données MySQL.
Je me connecte donc en MySQL, j'inscris mon identifient et mon mot de passe qui sont stockés dans des variables, ensuite je regarde quel ID correspond au PASS et au USER.
Si ce sont les même, alors je dit "Vous êtes connecté !" Sinon je dit : "Vous n'êtes pas connecté !".
Voici le code :
Imports MySql.Data.MySqlClient
Public Class Form1
Public ConnexionSql As String = "Database=jeu;" & "Data Source=monnomdedomaine.fr;" & "User Id=monid;Password=******;" & "Connection Timeout=20" 'Cela je l'ai modifié :)
Public Sub Lecture()
Try
Dim USER As String = TXTBOX_USER.Text
Dim PASS As String = TXTBOX_PASS.Text
Dim query As String = "SELECT id from users Where pass = @PASS"
Dim query2 As String = "SELECT id from users Where user = @USER"
Dim connection As New MySqlConnection(ConnexionSql)
Dim command As New MySqlCommand(query, connection)
Dim command2 As New MySqlCommand(query2, connection)
Dim iduser As Integer
Dim idpass As Integer
connection.Open()
Try
iduser = command.ExecuteNonQuery
idpass = command2.ExecuteNonQuery
If iduser = idpass Then
LB_CONNECT.Text = "Bravo vous êtes connecté :)"
Else
LB_CONNECT.Text = "Le nom d'utilisateur ou le mot de passe est faux :("
End If
Catch ex As Exception
LB_ERREUR.Text = ex.Message
End Try
connection.Close()
Catch ex As Exception
LB_ERREUR.Text = ex.Message
End Try
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub BT_COMMENC_Click(sender As System.Object, e As System.EventArgs) Handles BT_COMMENC.Click
Lecture()
End Sub
End Class
A voir également:
- Voir si la ligne existe user/pass en MySQL sur VB.net
- Partager photos en ligne - Guide
- Voir sa maison sur google street view - Guide
- Voir mot de passe wifi android - Guide
- Mètre en ligne - Guide
- Voir qui regarde mon profil facebook - Guide
3 réponses
Excusez-moi vraiment mais j'ai trouvé la réponse depuis longtemps (je ne me souvenais plus avoir posté la question sur ce forum.
Voici comment on fait pour d'éventuel demandeurs:
Voilà, au revoir et merci d'avoir répondu à ma demande
Amicalement
Jérôme
Voici comment on fait pour d'éventuel demandeurs:
try
Public ConnexionSql As String = "Database=madatabase;" & "Data Source=monsite.fr;" & "User Id=monid;Password=monpass;" & "Connection Timeout=20"
Dim connection As New MySqlConnection(ConnexionSql)
connection.Open()
Dim query As String = "SELECT id FROM matable WHERE pass = @pass and user = @user LIMIT 1" 'Moi mon pass je l'ai concacter puis md5ter :)
Dim command As New MySqlCommand(query, connection)
command.Prepare()
command.Parameters.AddWithValue("@pass", PASS) '@pass ne peux rien dire dans la query, je lui dit donc qu'il est égale à la variable PASS.
command.Parameters.AddWithValue("@user", USER)
Dim mysqlReader As MySqlDataReader = command.ExecuteReader()
' Call Read before accessing data.
Dim hasmatch As Boolean = False
While mysqlReader.Read()
Dim record As IDataRecord = CType(mysqlReader, IDataRecord)
If record(0) Then
hasmatch = True
End If
End While
If hasmatch Then
userbon = TXTBOX_USER.Text
LB_CONNECT.Text = "Bravo " & USER & ", vous êtes connectés"
TXTBOX_PASS.Clear()
TXTBOX_USER.Clear()
'là vous mettez tout ce que vous vouez faire si le user est bon.
Exit Sub
Else
MsgBox("Vous n'êtes pas connecté")
LB_CONNECT.Text = "Vous n'êtes pas connectés"
End If
'mysqlReader.Close()
' Call Close when done reading.
mysqlReader.Close()
connection.Close()
Catch ex As Exception
LB_ERREUR.Text = ex.Message 'ou MsgBox si vous voulez
End Try
Voilà, au revoir et merci d'avoir répondu à ma demande
Amicalement
Jérôme
Bonjour,
Tu ne dis pas quel est ton problème !
Est-ce que tu as une erreur à l'exécution ?
À la compilation ?
Est-ce que le comportement n'est pas celui attendu ?
Sinon, ta méthode d'authentification n'est pas bonne.
Imagine que deux utilisateurs aient le même mot de passe : tu ne sais pas quel id te sera retourné en premier.
Il vaut mieux faire une seule requête qui vérifie les deux égalités :
SELECT count(id) from users Where pass = @PASS AND user = @USER
Et vérifier que le résultat est positif (comprendre : qu'il y a au moins une ligne qui contienne ce User et ce Pass)
Xavier
Tu ne dis pas quel est ton problème !
Est-ce que tu as une erreur à l'exécution ?
À la compilation ?
Est-ce que le comportement n'est pas celui attendu ?
Sinon, ta méthode d'authentification n'est pas bonne.
Imagine que deux utilisateurs aient le même mot de passe : tu ne sais pas quel id te sera retourné en premier.
Il vaut mieux faire une seule requête qui vérifie les deux égalités :
SELECT count(id) from users Where pass = @PASS AND user = @USER
Et vérifier que le résultat est positif (comprendre : qu'il y a au moins une ligne qui contienne ce User et ce Pass)
Xavier
Si ça peut aider...
Voici une classe, écrite il y a longtemps mais qui marche bien qui permet de travailler dans une base mysql : exécuter des requêtes sql, lire, écrire des données...
'il faut avoir importé dans les références : MySql.Data
'Disponible sur : https://dev.mysql.com/downloads/connector/net/
exemple d'utilisation :
Voici une classe, écrite il y a longtemps mais qui marche bien qui permet de travailler dans une base mysql : exécuter des requêtes sql, lire, écrire des données...
'il faut avoir importé dans les références : MySql.Data
'Disponible sur : https://dev.mysql.com/downloads/connector/net/
Imports MySql.Data.MySqlClient
Public Class SQLM
#Region "Variables"
Private Const inObjectError = vbObjectError + 100
Private dbSQLM As MySqlConnection
Private _Current_Row As Integer = 0 'Variable de propriété : GET/SET : N° de ligne en cour lue dans la table
Private _EoT As Boolean = True 'Variable de propriété : GET : Indique si l'on est arrivé en fin de table
Private _SQL As String = "" 'Variable de propriété : GET/SET : Requête SQL en cour
Private _Rows As Integer = 0 'Variable de propriété : GET : Nombre de lignes total
Private _Cols As Integer = 0 'Variable de propriété : GET : Nombre de colonnes total
Private _DataTable As DataTable
'Variable de propriété : GET : Le DataTable en cour = ON PEUT NAVIGUER DIRECTEMENT DEDANS après avoir executer
'la fonction query ou query_auto (Si on ne veut pas passer par les fonctions simplifié que j'ai crée ci-dessous)
Private _Affected_Rows As Integer = 0 'Variable de propriété : GET/SET : Le nombre de lignes affectés par une requête non SELECT
Private _Option_NonQuery_Auto As Boolean = True 'Variable de propriété : GET : Définit une option qui laisse la classe déterminer elle même le type de requête : SELECT ou non
Private _SQLError As Boolean = False
Private _SQLErrorExpression As String = ""
#End Region
#Region "Liste des propriétés"
Public Property Current_Row() As Integer
Get
Return _Current_Row
End Get
Set(ByVal Current_Row As Integer)
_Current_Row = Current_Row
End Set
End Property
Public Property SQL() As String
Get
Return _SQL
End Get
Set(ByVal SQL As String)
_SQL = SQL
End Set
End Property
Public Property Option_NonQuery_Auto() As Boolean
Get
Return _Option_NonQuery_Auto
End Get
Set(ByVal Option_NonQuery_Auto As Boolean)
_Option_NonQuery_Auto = Option_NonQuery_Auto
End Set
End Property
Public ReadOnly Property Rows() As Integer
Get
Return _Rows
End Get
End Property
Public ReadOnly Property Cols() As Integer
Get
Return _Cols
End Get
End Property
Public ReadOnly Property EoT() As Boolean
Get
Return _EoT
End Get
End Property
Public ReadOnly Property DataTable() As DataTable
Get
Return _DataTable
End Get
End Property
Public ReadOnly Property Affected_Rows() As Integer
Get
Return _Affected_Rows
End Get
End Property
Public ReadOnly Property Column(ByVal Index As Integer) As String
Get
Return _DataTable.Columns(Index).Caption
End Get
End Property
Public ReadOnly Property SQLError() As Boolean
Get
Return _SQLError
End Get
End Property
Public ReadOnly Property SQLErrorExpression() As String
Get
Return _SQLErrorExpression
End Get
End Property
#End Region
#Region "New"
Private Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal ConnectionString As String)
MyClass.New()
dbSQLM = New MySqlConnection(ConnectionString)
End Sub
Public Sub New(ByVal SQL As String, ByVal ConnectionString As String)
MyClass.New(ConnectionString)
Query_Auto(SQL)
End Sub
#End Region
#Region "Connexion / Fermeture"
Public Sub Connect()
dbSQLM.Open()
End Sub
Public Sub Close()
dbSQLM.Close()
End Sub
#End Region
#Region "Query"
Public Function Query(ByVal SQL As String) As Boolean
'Execute la requête SQL fournie en argument
'et détermine si elle est de type SELECT ou non (si la
'propriété Option_NonQuery_Auto est égal à True) afin
'd'affecté dans les propriétés de "retour" des valeurs adéquates
Return Query_NonQuery_Auto(SQL)
End Function
Public Function Query(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
'Execute la requête SQL stocké dans la propriété SQL
'selon le mode NonQuery
Dim RST As Boolean = False
Return Query_Execute(SQL, NonQuery)
End Function
#End Region
#Region "Query_Auto (Connexion et deconnexion automatique)"
'Fonctions identiques à Query sauf que la connexion et
'la deconnexion à la base se fait automatiquement (pourvu qu'on
'est bien remplit les propriétés de connexion
Public Function Query_Auto(ByVal SQL As String) As Boolean
Dim RST As Boolean = False
Connect()
RST = Query_NonQuery_Auto(SQL)
Close()
Return RST
End Function
Public Function Query_Auto(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
Dim RST As Boolean = False
Connect()
RST = Query_Execute(SQL, NonQuery)
Close()
Return RST
End Function
#End Region
#Region "Traitement de le requête SQL"
Private Function As_SELECT(ByVal SQL As String) As Boolean
'Détermine si la requête est de type SELECT
If SQL.Substring(0, 6).ToLower.ToString = "select" Then Return True
Return False
End Function
Private Function Query_NonQuery_Auto(ByVal SQL As String) As Boolean
'Détermine le mode d'execution de la requete : SELECT ou AUTRE
If _Option_NonQuery_Auto Then
Dim NonQuery As Boolean = Not As_SELECT(SQL)
Return Query_Execute(SQL, NonQuery)
Else
Return Query_Execute(SQL, False)
End If
Return Nothing
End Function
Private Function Query_Execute(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
'Execute la requête
'Initialise les propriétés
_Current_Row = 0
_EoT = True
_Rows = 0
_Cols = 0
_DataTable = Nothing
_Affected_Rows = 0
_SQLError = False
'Debug.Print(SQL)
Try
If NonQuery Then
'Si la requête n'est pas de type SELECT et donc ne renvoit pas de DataTable
Dim reader As MySqlDataReader
Dim cmd As New MySqlCommand(SQL, dbSQLM)
reader = cmd.ExecuteReader()
'affecte la proprité contenant le nombre d'enregistrement affecté par la requête
_Affected_Rows = reader.RecordsAffected
Else
'La requête renvoit un DataTable
Dim RST_DataTable As DataTable = New DataTable
Dim Table As New DataSet
Dim da As New MySqlDataAdapter
da = New MySqlDataAdapter(SQL, dbSQLM)
da.Fill(Table, "RST")
RST_DataTable = Table.Tables("RST")
'Affecte les propriétés
_Current_Row = 0
If RST_DataTable.Rows.Count = 0 Then
_EoT = True
Else
_EoT = False
End If
_Rows = RST_DataTable.Rows.Count
_Cols = RST_DataTable.Columns.Count
_DataTable = RST_DataTable
End If
Catch ex As MySqlException
_SQLError = True
_SQLErrorExpression = ex.Message
'MessageBox.Show("Error connecting to the server: " + ex.Message + vbCrLf + vbCrLf + "SQL : " + vbCrLf + SQL, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
_SQL = SQL
End Try
Return Not _SQLError
End Function
#End Region
#Region "Fonctions de navigation de le DataTable"
Private Function Update_Current_Row(ByVal Current_Row As Integer) As Boolean
'Met à jour la propriété Current_Row si possible
Dim RST As Boolean = False
If Current_Row > 0 Then
If Current_Row <= _DataTable.Rows.Count Then
_Current_Row = Current_Row
If _Current_Row = _DataTable.Rows.Count Then
_EoT = True
End If
RST = True
End If
End If
Return RST
End Function
Public Function Record_Previous() As Boolean
'Recule de 1 la propriété Current_Row si possible
Return Update_Current_Row(_Current_Row - 1)
End Function
Public Function Record_Next() As Boolean
'Avance de 1 la propriété Current_Row si possible
Return Update_Current_Row(_Current_Row + 1)
End Function
Public Function Get_Value(ByVal key As Object) As Object
'Permet de récupéré la valeur de la colonne "key" qui peut
'soit être de type String (key) soit de type Numerique (Index)
'en fonction de la propriété Current_Row
Dim RST As Object
Dim Row = _Current_Row
If IsNumeric(key) Then
RST = _DataTable.Rows(Row).Item(CInt(key))
Else
RST = _DataTable.Rows(Row).Item(key.ToString)
End If
Return RST
End Function
Public Function Get_Value() As Dictionary(Of String, Object)
'Permet de récupéré les valeurs de la ligne Current_Row et les place dans un tableau associatif
Dim RST As New Dictionary(Of String, Object)
Dim Row = _Current_Row
Dim j As Integer = 0
Dim Key As String = ""
With _DataTable
For j = 0 To .Columns.Count - 1
Key = .Columns(j).ColumnName
RST.Add(Key, .Rows(Row).Item(Key))
Next
End With
Return RST
End Function
Public Function ColumnExist(ByVal Column As String) As Boolean
Dim RST As Boolean = False
If _DataTable.Columns.Contains(Column) Then RST = True
Return RST
End Function
Public Sub Dispose()
If dbSQLM IsNot Nothing Then dbSQLM.Dispose()
_Current_Row = 0
_EoT = True
_SQL = ""
_Rows = 0
_Cols = 0
If _DataTable IsNot Nothing Then _DataTable.Dispose()
_Affected_Rows = 0
_Option_NonQuery_Auto = True
End Sub
#End Region
Public Shared Function EscapeSQL(ByVal Value As String) As String
Return Value.Replace("\", "\\")
End Function
Public Shared Function Addslashes(ByVal Value As String, Optional ByVal Esc As Char = CChar("\")) As String
Dim RST As String = Value
If Not Esc = Nothing Then
Dim Co() As Char = RST.ToCharArray
Dim Cf() As Char
Dim MyC As New Char
ReDim Cf(-1)
For Each MyC In Co
If MyC = "'" Or MyC = Chr(34) Or MyC = Esc Or MyC = Chr(0) Or MyC = "'" Then
ReDim Preserve Cf(Cf.Length)
Cf(Cf.Length - 1) = Esc
End If
ReDim Preserve Cf(Cf.Length)
Cf(Cf.Length - 1) = MyC
Next
RST = Cf
End If
Return RST
End Function
Public Shared Function Stripslashes(ByVal Value As String, Optional ByVal Esc As Char = CChar("\")) As String
Value = Value.Replace(Esc + Chr(34), Chr(34))
Value = Value.Replace(Esc + Esc, Esc)
Value = Value.Replace(Esc + Chr(0), Chr(0))
Value = Value.Replace(Esc + "'", "'")
Value = Value.Replace(Esc + "'", "'")
Return Value
End Function
Public Shared Function EntoureVar(ByVal Expression As String, Optional ByVal Entoure As Char = CChar("'")) As String
Return EntoureVar(Expression, False, Entoure)
End Function
Public Shared Function EntoureVar(ByVal Expression As String, Force As Boolean, Optional ByVal Entoure As Char = CChar("'")) As String
If Not Force And IsNumericNotSpace(Expression) Then
Return Expression.Replace(",", ".")
Else
Return Entoure + Addslashes(Expression) + Entoure
End If
End Function
Public Shared Function IsNumericNotSpace(ByVal Expression As String) As Boolean
If Expression.IndexOf(" ") = -1 Then
If IsNumeric(Expression) Then Return True
End If
Return False
End Function
Public Function RunQuery(ByVal Query As String) As DataSet
Try
dbSQLM.Open()
Dim DA As New MySqlDataAdapter
Dim MyRs As New DataSet
DA.SelectCommand = New MySqlCommand(Query, dbSQLM)
DA.Fill(MyRs)
dbSQLM.Close()
Return MyRs
Catch ex As Exception
dbSQLM.Close()
Err.Raise(inObjectError + 2, "SQLM_MySQL", "Erreur lors de la requete:" + vbCrLf + vbCrLf + Query + vbCrLf + vbCrLf + ex.Message)
Return New DataSet
End Try
End Function
End Class
exemple d'utilisation :
Dim S As New SQLM("SELECT * FROM composer WHERE idarticle = " + Father.Id.ToString, Parametres.ConnectionStringArticles)
While Not S.EoT
Dim Id As Integer = CInt(S.Get_Value("idcomposant"))
Dim Quantite As Single = CSng(S.Get_Value("quantite"))
'(...)
'(...)
S.Record_Next()
End While