Вход в Visual Basic

Может ли кто-нибудь помочь мне, у меня проблемы со входом в систему. Когда я пытаюсь войти в систему, я получаю сообщение об ошибке «Многоэтапная операция OLE DB сгенерировала ошибки. Проверьте каждое значение состояния OLE DB, если оно доступно. Никакая работа не была выполнена». - В сочетании с поиском ExecuteScalar.

Заранее благодарю вас за любую помощь, которую вы можете или не можете мне оказать.

 Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

    If String.IsNullOrWhiteSpace(txtUsername.Text) Then
        Invalid()
        Exit Sub
    End If

    Using con As New OleDbConnection(connectionString)
        Dim cmd As New OleDbCommand("Select count(*) From tblAccounts where Username = ?", con)
        cmd.Parameters.AddWithValue("Username", txtUsername)
        con.Open()

        If CType(cmd.ExecuteScalar(), Integer) > 0 Then
            cmd.CommandText = "Select CPassword From tblAccounts Where Username = ?"
            Dim matches As String = CType(cmd.ExecuteScalar(), String)
            If matches = Sha1(txtPassword.Text) Then
                Response.Redirect("main.aspx")
            Else
                Invalid()
            End If
        Else
            Invalid()
        End If
    End Using

 End Sub

person Jaxom Nutt    schedule 21.10.2013    source источник
comment
По этой ссылке (support.microsoft.com/kb/269495/en-us) кажется, что эта ошибка спровоцирована вашей строкой подключения. Вы можете следовать предложениям по этой ссылке или опубликовать connectionString содержимое, чтобы кто-то мог вам помочь. PS: вы выполняете cmd.ExecuteScalar() дважды: лучше вынесите строку Dim matches As String = CType(cmd.ExecuteScalar(), String) за пределы условия и напишите matches > 0 внутри оператора условия.   -  person varocarbas    schedule 21.10.2013
comment
Какую базу данных вы бьете? SQL-сервер/доступ/и т. д.? ? Параметр зависит от базы данных. Попробуйте использовать @UserName и именованную переменную в SQL и файле cmd.Parameters.AddWithValue("@Username", txtUsername). Посмотрите, поможет ли это.   -  person Steve    schedule 21.10.2013


Ответы (1)


Во-первых, я бы посоветовал (что уже было предложено) перепроверить строку подключения...

Лично я бы не стал повторно использовать один и тот же OleDbCommand, так как это может привести к нежелательным результатам. Вместо этого я бы попробовал что-то вроде следующего:

Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

    If Not String.IsNullOrWhiteSpace(txtUsername.Text) Then

        Using con As New OleDbConnection(ConnectionString)
            con.Open()

            Dim Result As Integer = 0

            Using cmd As New OleDbCommand("Select count(*) From tblAccounts where Username = @Username", con)
                cmd.Parameters.AddWithValue("@Username", txtUsername.text)

                Result = CInt(cmd.ExecuteScalar)
            End Using

            If Result > 0 Then
                Using cmd As New OleDbCommand("Select CPassword From tblAccounts Where Username = @Username", con)
                    cmd.Parameters.AddWithValue("@Username", txtUsername.text)

                    Dim Obj As Object = cmd.ExecuteScalar()

                    If (Obj IsNot Nothing) AndAlso (Obj IsNot DBNull.Value) Then
                        Dim matches As String = Obj.ToString

                        If matches = SHA1(txtPassword.Text) Then
                            Response.Redirect("main.aspx")
                            Exit Sub
                        End If

                    End If

                End Using
            End If

        End Using

    End If

    Invalid()

End Sub

Надеюсь это поможет

person Grahamvs    schedule 21.10.2013