2014-11-10 13 views
0

이것은 비밀 번호 분실에 관한 것입니다. 오류 직면이 문에 대한 범위를 벗어난 인덱스를 "만일 ds.Tables (0) .Rows.Count을> 0 그런 다음"비밀 번호 분실 asp.net

Dim com As New MySqlCommand 
    Dim dr As MySqlDataReader 
    conn.Open() 
    Dim query As String 

    query = "select Password, CustomerName from userdetail where Email = @Email" 

    com = New MySqlCommand(query, conn) 

    com.Parameters.AddWithValue("@Email", Email.Text) 

    dr = com.ExecuteReader 



    If dr(0).ToString > 0 Then 

     Dim Smtp_Server As New SmtpClient 
     Dim e_mail As New MailMessage() 

     Smtp_Server.UseDefaultCredentials = False 
     Smtp_Server.Credentials = New Net.NetworkCredential("xxx", "xxx") 
     Smtp_Server.Port = 587 
     Smtp_Server.EnableSsl = True 
     Smtp_Server.Host = "smtp.gmail.com" 

     e_mail = New MailMessage() 
     e_mail.From = New MailAddress("xxx") 
     e_mail.To.Add(Email.Text) 
     e_mail.Subject = "Your Password Details" 
     e_mail.IsBodyHtml = True 
     e_mail.Body = "Hi, <br/>Please check your Login Detailss<br/><br/>Your Username: " & 
         Convert.ToString(ds.Tables(0).Rows(0)("CustomerName")) & "<br/><br/>Your Password: " & 
         Convert.ToString(ds.Tables(0).Rows(0)("Password")) & "<br/><br/>" 
     Smtp_Server.Send(e_mail) 

    Else 
     Label7.Text = "The Email you entered not exists" 

    End 
    conn.Close() 

내 데이터베이스 설계 : 사용자 아이디, 비밀번호, CUSTOMERNAME, 연락처, 이메일, 상태

+6

그러면 'ds. 테이블'이 비어있는 것 같습니다. 'ds '란 무엇이며 어디에서 채우고 있습니까? 그것은 당신의 SQL 상호 작용에 어떤 식 으로든 관계가있는 것처럼 보이지 않습니다. 또한 사용자 암호를 일반 텍스트로 저장하는 것 같습니다. *** 사용자 암호를 일반 텍스트로 저장하지 마십시오. *** 사용자에게 암호를 전자 메일로 보내고 있습니다. *** 비밀번호를 이메일로 보내지 마십시오. *** 그것은 사용자에게 무책임한 일입니다. – David

+0

호출 _If dr (0) .ToString> 0 그런 다음 레코드가 반복해서 끊어 지는지 확인하지 않고 연결을 닫은 후에는 의미가 없으며 호출합니다. 그러나 아직도 나는 예외를 던지고있는 라인이 어디에 있는지 이해하지 못한다. 물론 위에 게시 된 코드에는 없습니다. – Steve

답변

0

너를 위해서.

그러나 나는이 강조를 테스트하지 않았습니다. "더보기"와 다윗의 의견은 완전히 정확하다고 말했습니다. 전자 메일에서 암호를 보내는 것은 결코 좋지 않습니다.

0

당신은

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) 

는 그런 다음 기록에 대한 귀하의 데이터 집합을 확인하실 수 있습니다 .. 내가 가정하고있는 ds가하는 Dataset?입니다 채울 필요가있다. 당신은 또한 확인해야 다음이 적용

  1. Email 필드는
  2. 암호를 재설정 할 수 있도록하고, 일반 텍스트를 보내지 않도록 사용자에게 전송 링크 독특한 입니다. 당신이 MySqlDataReadersDataSet

    사이에 더 같은

    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 
    

    Using 명령 및 연결을 폐기 처리됩니다 보여야 MySqlDataReader 솔루션을 지금 당신이 혼합 질문을 변경하고 한 확인

+0

그리고 코드에서 da는 무엇입니까? :-) 또한 그/그녀는 MySQL과 함께 작동 – Steve

+0

@ 스티브, 좋은 자리 - 나는 단지 C#을 변환 할 때 코드의 일부를 움켜 잡습니다. – christiandev

+0

감사합니다. 나중에 나는 생성 된 암호를 구현할 것이다. – noname