2014-12-31 2 views
1

MySQL의 특정 열을 검사하고 이미 존재하는 경우 해당 값을 반환하는 데 도움이되는 코드를 찾고 있습니다. ForgotPassword 모듈에서 작업 중이므로 사용자가 "비밀번호 분실"을 클릭하면 사용자에게 사용자 이름을 입력하라는 양식이 표시됩니다. 일단 그/그녀가 끝나면 입력 된 사용자 이름이 존재하는지 확인하기 위해 시스템을 검사합니다. 여기 스택 오버플로에 대한 몇 가지 코드 발견 :MySQL에서 필드의 특정 값이 존재하는지 확인하는 방법

Private Sub btnCheckUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckUser.Click 
    If IsUserExist(userName:=True) Then 
     MsgBox("user exists") 
    Else 
     MsgBox("user does not exists") 
    End If 
End Sub 

Private Function IsUserExist(ByVal userName As String) As Boolean 
    Dim query As String 
    Dim returnValue As Boolean = False 

    query = "SELECT username FROM dbase.tblusers WHERE username = @username " 

    Using conn As New MySqlConnection("server=localhost; userid=root; password=root; database=dbase") 
     Using cmd As New MySqlCommand() 
      With cmd 
       .Connection = conn 
       .CommandText = query 
       .CommandType = CommandType.Text 
       .Parameters.AddWithValue("@username", txtUsername.Text) 
      End With 
      Try 
       conn.Open() 
       If CInt(cmd.ExecuteScalar()) > 0 Then 
        returnValue = True 
       End If 
      Catch ex As MySqlException 
       MsgBox(ex.Message) 
       returnValue = False 
      Finally 
       conn.Close() 
      End Try 
     End Using 
    End Using 
    Return returnValue 
End Function 

을하지만이 코드는 If CInt(cmd.ExecuteScalar()) > 0 Then에서 나에게 오류 Conversion from string "username" to type 'Integer' is not valid을 제공합니다.

+0

을 초기화하기 위해 IsUserExist 수신 사용해야합니다'만약 IsUserExist (아이디 : = 참)은 VB Then'인가 ??? 나는 결코 그런 건축을 만나지 않았다. 이 문자열에서'username' 변수를 사용해야합니다. IsUserExist (TextEdit1.Text)와 비슷하거나, –

+0

@ MarkZucchini와 비슷합니다. 오류는 없습니다. 그리고 전 dat 건설도 발생하지 않았습니다. 내가 어떻게 문제를 해결할 수 있는지 알고 있니? :) – Fvcundo

+0

코드에서'.Parameters.AddWithValue ("@ username", txtUsername.Text) 문자열이 있습니다. 이것은 txtUsername 텍스트 상자에서 사용자 이름 값을 취하는 것으로 보이므로 매개 변수로 userName이 중요하지 않습니다. 이 줄을'.Parameters.AddWithValue ("@ username", userName)' –

답변

1

MySqlCommand.ExecuteScalar은 쿼리에서 반환 한 첫 번째 행의 첫 번째 열을 반환합니다. 이것은 (실제 쿼리의 경우) NULL (사용자 이름이없는 경우) 또는 where 사용자 조건에 대한 매개 변수로 전달 된 동일한 사용자 이름을 가진 문자열을 의미합니다. 어떤 경우에는 정수가 아닙니다.
그래서 반환 된 객체가 null인지 (VB.NET에서는 Nothing인지) 확인할 필요가 있습니다.

Dim result = cmd.ExecuteScalar() 
if result IsNot Nothing then 
    ... user exists.... 

문제의 또 다른 방법은,

query = "SELECT COUNT(*) FROM dbase.tblusers WHERE username = @username" 

다음 ExecuteScalar의 반환 값의 정수로 변환을 사용자 이름이 포함 된 행의 수를 것입니다 돌아 가지 수 작업

마지막으로 구문은 If IsUserExist(userName:=True) Then입니다.

이것은 아마도 프로젝트의 Option Strict 구성이 꺼짐으로 설정되어 있기 때문에 효과가있을 것입니다.
이 구성에서 부울 값 TrueIsUserExist의 매개 변수로 예상되는 데이터 유형으로 자동 변환됩니다. 따라서이 함수는 매개 변수 username을 리터럴 문자열 "True"와 같습니다. 테이블에서 실제 사용자 이름을 검색하려고 할 때 유용하지는 않습니다.
아마도 TextBox에서 buttonclick 코드 어딘가에 그 값을 가져와야 할 것 같습니다.

Private Sub btnCheckUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckUser.Click 
    Dim userName = txtUsername.Text 
    If IsUserExist(userName) Then 
     MsgBox("user exists") 
    Else 
     MsgBox("user does not exists") 
    End If 
End Sub 

물론, 지금은 변수 userName 매개 변수

With cmd 
    .Parameters.AddWithValue("@username", userName) 
    .... 
+0

, 어떻게 d 옵션을 엄격하게 사용할 수 있습니까? 그런데 효과가있었습니다. :) 타이 너무. "SELECT username"의 쿼리를 "SELECT COUNT (*)"로 바꿨습니다. – Fvcundo

+1

위의 링크에서 Option Strict의 이유와 효과 및이를 변경하는 다양한 방법에 대해 설명합니다. 처음에는 어려울 수 있지만 Option Strict On은 장기적으로 돈을 지불합니다 – Steve

+0

Gald가 도움이 될 것입니다. 이 사이트의 새로운 사용자 인 저는이 기사의 [답변 수락 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer- 작업) 당신이 유용하다고 여기는 답 중 하나가 발견되면 다른 독자들에게 문제가 해결되었음을 보여줄 것입니다. – Steve

0
Private Sub btnCheckUser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheckUser.Click 
    If IsUserExist(txtUsername.Text) Then #Use value from textbox on your form, use '#' for comments 
     MsgBox("user exists") 
    Else 
     MsgBox("user does not exists") 
    End If 
End Sub 

Private Function IsUserExist(ByVal userName As String) As Boolean 
    Dim query As String 
    Dim returnValue As Boolean = False 

    query = "SELECT username FROM dbase.tblusers WHERE username = @username " 

    Using conn As New MySqlConnection("server=localhost; userid=root; password=root; database=dbase") 
     Using cmd As New MySqlCommand() 
      With cmd 
       .Connection = conn 
       .CommandText = query 
       .CommandType = CommandType.Text 
       .Parameters.AddWithValue("@username", userName) # I think here should user value from function's parameter, not from textbox 
      End With 
      Try 
       conn.Open() 
       If CInt(cmd.ExecuteScalar()) > 0 Then 
        returnValue = True 
       End If 
      Catch ex As MySqlException 
       MsgBox(ex.Message) 
       returnValue = False 
      Finally 
       conn.Close() 
      End Try 
     End Using 
    End Using 
    Return returnValue 
End Function 
+0

예. :) 나는 "IsUserExist (userName : = True)"를 넣을 때 내 IF 블록이 잘 작동하지 않는다고 생각합니다. 타이 너무. 이제 나는 계속 나아갈 수 있습니다. – Fvcundo

+0

댓글에 # 사용 – oozmac

관련 문제