在vb 2010中使用mysql连接器登录系统

时间:2012-07-06 10:22:13

标签: mysql vb.net

我为我的程序制作了一个简单的登录代码。

在我的网站上,我为存储用户名,电子邮件和密码的程序创建了一个mysql数据库,我已经查询了数据库2次以插入2个帐户。

我可以在第一个帐户没有问题的情况下登录,但不能使用第二个和第三个帐户登录。

无论如何这里是代码:

Dim dbConn As New MySqlConnection
                        Dim UsernameVerify As New MySqlCommand
                        Dim PasswordVerify As New MySqlCommand
                        Dim EmailVerify As New MySqlCommand
                        Dim typeverify As New MySqlCommand
                        Dim lgnUsername As String
                        Dim lgnPassword As String
                        Dim lgnEmail As String
                        Dim lgntype As String
                        'server info
                        dbConn.ConnectionString = "server=*************;UserID=*******;password=********;database=*****"
                        Try
                            dbConn.Open()
                            UsernameVerify.Connection = dbConn
                            UsernameVerify.CommandText = "Select USERNAME from users"
                            PasswordVerify.Connection = dbConn
                            PasswordVerify.CommandText = "Select PASSWORD from users"
                            EmailVerify.Connection = dbConn
                            EmailVerify.CommandText = "Select EMAIL from users"
                            typeverify.Connection = dbConn
                            typeverify.CommandText = "Select TYPE from users"


                            lgnUsername = UsernameVerify.ExecuteScalar
                            lgnPassword = PasswordVerify.ExecuteScalar
                            lgnEmail = EmailVerify.ExecuteScalar
                            lgntype = typeverify.ExecuteScalar
                            dbConn.Close()
                            If ComboBox1.Text = lgnUsername And ComboBox2.Text = lgnPassword And ComboBox3.Text = lgnEmail And ComboBox4.Text = lgntype Then
                                Panel1.BackgroundImage = mpng2
                                Label5.Text = "Succesfully verified user !"
                                Me.Close()

                            Else
                                Panel1.BackgroundImage = mpng
                                Label5.Text = "Could not find user check your credentials"
                                ComboBox1.Focus()

                            End If
                        Catch ex As MySqlException
                            Label5.Text = "Error while verifying "
                            MessageBox.Show("Error when connecting to database|" + ex.Message)
                            dbConn.Dispose()
                            verifying.Close()

                        End Try

有谁知道如何解决这个问题。

我已经在考虑使用while循环或其他东西了吗?

1 个答案:

答案 0 :(得分:0)

没有必要循环,你正在为自己的生活而努力。记住要始终保持简单。

简单登录代码可能如下所示:

Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As SYstem.EventArgs) Handles btnLogin.Click

    Dim conn As New MysqlConnection("Server=****;Database=****;User=****;Password=****;")

    Dim sql As String = "SELECT userid, username, password, email, type FROM users WHERE username = xname AND password = xpass"

    Dim args As New List(Of MySqlParameter)
    args.Add(New MySqlParameter("xname", txtUsername.Text))
    args.Add(New MySqlParameter("xpass", txtPassword.Text))

    Dim cmd As MySqlCommand = New MySqlCommand(sql, conn)
    cmd.Parameters.AddRange(args.ToArray) ' You might want to check this, not sure if it needs the .ToArray

    Dim drLogin As MySqlDataReader = cmd.ExecuteReader()

    If drLogin.HasRows

        ' do login code here (I'll store user details out the DataReader and redirect)
        dr.Read()

        Session("userid") = dr("userid")
        Session("username") = dr("username")
        Session("usertype") = dr("type")

        Response.Redirect("~/Members/Home.aspx")
    Else
        lblerr.Text = "Invalid username/password"
        lblerr.ForeColor = System.Drawing.Color.Red
    End If
End Sub

此代码获取您在一次查询中可能需要的所有用户信息(适用于限制数据库的开销)。 sql中的WHERE子句意味着它只会获得用户名和密码与用户登录时匹配的行。

List(Of SqlParameter)只存储输入的值以供在sql中使用。这有助于保护表单更多,因为sql注入不太可能这样。我在这里将此List转换为数组,因为我不确定SqlCommand.Paramaters.AddRange是否接受List。其中一种方式可行。

会话变量对于显示仅与登录用户相关的内容非常有用。您可以使用userid将数据库的结果限制为仅获取userid与Session(“userid”)值相同的内容。

希望这有帮助!