0

私の悪い英語で申し訳ありません。誰かがエラーのThe conversion from type MySqlDataReader to type Integer is invalid意味を説明してくれることを願っています。

私はそれが単純な「Dim a Integer」であると確信していましたが、それよりも大きいか、単に愚かでした.

私の 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はAs New 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

私もこの関数を使用しようとしましたが、同じエラーメッセージが表示されました:

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は自明だと確信していました。

4

1 に答える 1

1

あなたの問題は、データリーダーを作成してそれを返すことです。myData変数を返す前に、変数から整数を読み取る必要があります。

したがって、代わりに:

Return myData

以下を使用できるはずです。

Return myData.GetInt32(0)

その0ステートメントの は、読み取りたい列を識別し、SQL クエリから単一の列を返すため、インデックス 0 にあります。

それを修正したら、続行する前に「SQL インジェクション」と「パラメータ化された SQL クエリ」をググってください。アプリを SQL インジェクションに対してオープンにすることは、重大なリスクです。

于 2013-02-23T18:38:57.383 に答える