忘记密码asp.net

忘记密码asp.net,asp.net,vb.net,Asp.net,Vb.net,这是关于忘记密码。面临的错误是索引超出此语句的范围“如果ds.Tables(0).Rows.Count>0 Then” Dim com作为新的MySqlCommand Dim dr作为MySqlDataReader 康涅狄格州公开赛 将查询设置为字符串 query=“从userdetail中选择密码、客户名称,其中Email=@Email” com=新的MySqlCommand(查询,连接) com.Parameters.AddWithValue(“@Email”,Email.Text) dr=

这是关于忘记密码。面临的错误是索引超出此语句的范围“如果ds.Tables(0).Rows.Count>0 Then”

Dim com作为新的MySqlCommand
Dim dr作为MySqlDataReader
康涅狄格州公开赛
将查询设置为字符串
query=“从userdetail中选择密码、客户名称,其中Email=@Email”
com=新的MySqlCommand(查询,连接)
com.Parameters.AddWithValue(“@Email”,Email.Text)
dr=com.ExecuteReader
如果dr(0).ToString>0,则
Dim Smtp_服务器作为新的SmtpClient
将电子邮件设置为新邮件消息()
Smtp_Server.UseDefaultCredentials=False
Smtp_Server.Credentials=新的网络凭据(“xxx”、“xxx”)
Smtp_Server.Port=587
Smtp_Server.EnableSsl=True
Smtp_Server.Host=“Smtp.gmail.com”
e_mail=New MailMessage()
e_mail.From=新邮件地址(“xxx”)
e_mail.To.Add(Email.Text)
e_mail.Subject=“您的密码详细信息”
e_mail.IsBodyHtml=True
e_mail.Body=“您好,
请检查您的登录详细信息

您的用户名:& Convert.ToString(ds.Tables(0).Rows(0)(“CustomerName”)&“

您的密码:& 转换.ToString(ds.表(0).行(0)(“密码”)&“

” Smtp_服务器。发送(电子邮件) 其他的 Label7.Text=“您输入的电子邮件不存在” 终点 康涅狄格州关闭
我的数据库设计:
用户ID、密码、客户名称、联系人、电子邮件、状态

您需要填充
ds
,我假设这是一个
数据集

Dim queryString As String = 
                "select Password, CustomerName from userdetail where Email = @Email"

Dim cmd As SqlCommand = conn.CreateCommand()
Dim da As New SqlDataAdapter()
cmd.Parameters.AddWithValue("@Email", Email.Text)
cmd.CommandText = queryString
da.SelectCommand = cmd
Dim ds As New DataSet()

conn.Open()
da.Fill(ds)
然后可以检查数据集中的记录。您还需要确保以下各项适用:

  • 电子邮件
    字段是唯一的
  • 发送给用户的链接,使其能够重置密码,而不发送明文

  • 好的,您已经更改了问题,现在您被
    MySqlDataReaders
    DataSet

    MySqlDataReader
    解决方案应该更像

        Using cn As New MySqlConnection("YOURCONNECTIONSTRING")
            cn.Open()
    
            Using cmd As New MySqlCommand("select Password, CustomerName from userdetail where Email = @Email", conn)
                cmd.Parameters.AddWithValue("@Email", Email.Text)
                Dim dr As MySqlDataReader
                dr = cmd.ExecuteReader
    
                If dr.Read() Then
    
                    'Did find a record to access the fields use = dr("FieldName").ToString()
    
    
                Else
    
                    'didnt find a record
                End If
    
                dr.Close()
                dr = Nothing
    
            End Using
    
        End Using
    
    使用
    将为您处理命令和连接


    然而,我还没有测试过这一点,所以强调“看起来更像”,所有这些都表明大卫的评论是完全正确的。在电子邮件中发送密码从来都不是好事

    那么看来
    ds.Tables
    是空的。什么是
    ds
    ,您在哪里填充它?它似乎与您的SQL交互没有任何关系。此外,您似乎正在以纯文本形式存储用户密码。切勿以纯文本形式存储用户密码。您还通过电子邮件向用户发送密码。永远不要用电子邮件发送密码。这对你的用户是非常不负责任的。如果dr(0)。ToString>0,那么调用它是毫无意义的,并且在关闭连接后调用它,而不检查是否有记录,将一次又一次地被刷新。但我还是不明白你说的抛出异常的那条线在哪里。当然不是在上面贴的代码中。那么在你的代码中da是什么?:-)还要注意的是,他/她与MySql@Steve,很好-转换时我只抓取了一部分c代码,谢谢大家。稍后我将实现密码生成。
        Using cn As New MySqlConnection("YOURCONNECTIONSTRING")
            cn.Open()
    
            Using cmd As New MySqlCommand("select Password, CustomerName from userdetail where Email = @Email", conn)
                cmd.Parameters.AddWithValue("@Email", Email.Text)
                Dim dr As MySqlDataReader
                dr = cmd.ExecuteReader
    
                If dr.Read() Then
    
                    'Did find a record to access the fields use = dr("FieldName").ToString()
    
    
                Else
    
                    'didnt find a record
                End If
    
                dr.Close()
                dr = Nothing
    
            End Using
    
        End Using