2013-02-23 5 views
0

나쁜 영어로는 유감입니다. 누군가가 오류 The conversion from type MySqlDataReader to type Integer is invalid의 의미를 설명 할 수 있기를 바랍니다.변환 유형 정수 오해

나는 단순한 '어둡게 정수'라고 확신했지만 그보다 더 크거나 어리 석다.

내 btnLogin_Click 코드 :

Dim SQL As New MySQLHook 
Dim loginResult As Integer 

Dim User As TextBox = Me.Controls.Item("TextGebruikersNaam") 
Dim Pass As TextBox = Me.Controls.Item("TextGebruikersPass") 

If String.IsNullOrEmpty(User.Text) Or String.IsNullOrEmpty(Pass.Text) Then 
    MsgBox("Voer een gebruikersnaam en wachtwoord in om verder te gaan.", MsgBoxStyle.Exclamation, "Foutmelding") 
    User.Focus() 
Else 
    loginResult = SQL.Results("SELECT * FROM tblgebruikers " & "WHERE GebruikersNaam='" & User.Text & "' AND " & "GebruikersPass='" & Pass.Text & "'") 

    If loginResult = 1 Then 
     ' Login was good, todo: add code here 
    Else 
     MsgBox("De gebruikersnaam of wachtwoord is onjuist. Probeer het opnieuw of vraag een nieuw wachtwoord aan.", MsgBoxStyle.Exclamation, "Foutmelding") 
     User.Text = "" 
     Pass.Text = "" 
     User.Focus() 
    End If 
End If 

내 결과 코드 (SQL.Results 새로운 MySQLHook로에서이다)

Public Function Results(ByVal sql) 
    Try 
     Dim conn = Connect() 

     Dim myAdapter As New MySqlDataAdapter 
     Dim myCommand As New MySqlCommand() 

     myCommand.Connection = conn 
     myCommand.CommandText = sql 

     myAdapter.SelectCommand = myCommand 

     Dim myData As MySqlDataReader 

     myData = myCommand.ExecuteReader() 
     Return myData 
    Catch myerror As MySqlException 
     clsError.logMessage("De server retourneerde de volgende foutmelding: " & myerror.Message) 
     Return DBNull.Value 
    End Try 
End Function 

I olso이 기능을 사용하여 시도하지만 나에게 같은 오류 메시지가 준 :

Public Function num_results(ByVal sql) 
Try 
    Dim conn = Connect() 

    Dim myAdapter As New MySqlDataAdapter 
    Dim myCommand As New MySqlCommand() 

    myCommand.Connection = conn 
    myCommand.CommandText = sql 
    myAdapter.SelectCommand = myCommand 

    Dim myData As MySqlDataReader 

    myData = myCommand.ExecuteReader() 
    Return myData 
Catch myerror As MySqlException 
    clsError.logMessage("De server retourneerde de volgende foutmelding: " & myerror.Message) 
    Return DBNull.Value 
End Try 
End Function 

왜이 변환 오류가 팝업됩니까? 나는 1 또는 0이 자기 설명하는 것이라고 확신했다.

+0

자신에게 유리하게 Option Strict On을 코드 파일이나 프로젝트 설정의 맨 위에 놓습니다. Results 함수에 반환 유형이 지정되지 않았으며 해당 매개 변수에도 유형이 없습니다. 어떻게 컴파일 할 수 있는지 모르겠다. –

답변

1

문제는 data reader을 생성하고이를 반환한다는 것입니다. 반환하기 전에 myData 변수에서 정수를 읽어야합니다. 당신이 하나를 반환하기 때문에

Return myData.GetInt32(0) 

그 진술의 0 당신이 읽고 싶은 열을 식별하고, :

그래서, 대신 :

Return myData 

당신은 사용할 수 있어야합니다 열을 SQL 쿼리에서 가져 오면 인덱스 0에 있습니다.

일단 수정했으면 google 'SQL i njection '및'parameterized SQL queries '를 참조하십시오. SQL 인젝션에 앱을 개방하는 것은 심각한 위험이 있습니다.

+0

@driis 코드에 감사드립니다. 'GetInt32 (0)'을 사용하여 myData를 편집하면 다음과 같은 오류 메시지가 나타납니다. '유형'DBNull '에서'정수 '유형으로 변환이 잘못되었습니다.' SQL 삽입 및 매개 변수화 된 SQL 쿼리 팁을 가져 주셔서 감사합니다. 오늘 그 일을 먼저 살펴볼 것입니다. –

+0

성공 사례에서 Integer를 반환하려고 시도 했으므로 예외이며, 성공하지 못하면 DBNull을 반환하기 때문입니다. 함수는 모든 경우에 대해 동일한 반환 유형을 가져야합니다. 지금처럼 예외를 삼키고 싶으면 catch 절에'0' 또는'Nothing'을 리턴하는 것을 고려하십시오. – driis

+0

driis, 코드의 모든 라인을 지나친 후, 마침내'Read()'를 호출하기 전에 필드에 액세스하려는 잘못된 시도가 발생합니다. 이제 그 문제를 해결하는 방법을 찾아 보겠습니다. 양해 해 주셔서 감사합니다. –