首页 > 解决方案 > 我正在使用带有存储过程的方法,但它总是返回 false

问题描述

我在 Visual Studio 2015 和 SQL Server 2005 中使用 bool 方法。

当我传递正确的详细信息并单击loginButton时,代码总是从存储过程中返回 false。

这是我在 SQL Server 2005 中的存储过程:

ALTER PROCEDURE [dbo].[UserCheckLoginDetails]
    (@IsLoginIdCorrect BIT OUTPUT,
     @IsPasswordCorrect BIT OUTPUT,
     @LoginID NVARCHAR(200),
     @Password NVARCHAR(20)
    )
AS
BEGIN
    SET @IsLoginIdCorrect = 0
    SET @IsPasswordCorrect = 0

    IF EXISTS (SELECT * FROM UserInfo 
               WHERE loginid = @LoginID AND password = @Password)
    BEGIN
        SET @IsLoginIdCorrect = 1
        SET @IsPasswordCorrect = 1
    END
    ELSE
        IF EXISTS (SELECT * FROM UserInfo WHERE loginid = @LoginID)
        BEGIN
            SET @IsLoginIdCorrect = 1
        END
END

这是我的方法返回TrueFalse

Private Sub GetIsUserLoginCorrect(IsLoginIdCorrect As Boolean, IsPasswordCorrect As Boolean)
    Using Conn As New SqlConnection(_SqlCon)
        Using cmd As New SqlCommand("UserCheckLoginDetails", Conn)
            cmd.CommandType = CommandType.StoredProcedure
            Conn.Open()

            'OutPut Parameters
            cmd.Parameters.Add("@IsLoginIdCorrect", SqlDbType.Bit).Direction = ParameterDirection.Output
            cmd.Parameters.Add("@IsPasswordCorrect", SqlDbType.Bit).Direction = ParameterDirection.Output

            'InPut Parameters
            cmd.Parameters.AddWithValue("@LoginID", LoginIDTextBox.Text)
            cmd.Parameters.AddWithValue("@Password", PasswordTextBox.Text)
            cmd.ExecuteNonQuery()

            ' Assign Parameters
            IsLoginIdCorrect = Convert.ToBoolean(cmd.Parameters("@IsLoginIdCorrect").Value)
            IsPasswordCorrect = Convert.ToBoolean(cmd.Parameters("@IsPasswordCorrect").Value)

        End Using
    End Using
End Sub

这是登录按钮单击事件处理程序,即使我提供了正确的值,它仍然总是返回 false:

Private Sub LoginButton_Click(sender As Object, e As EventArgs) Handles LoginButton.Click
    Try
        Dim IsLoginIdCorrect, IsPasswordCorrect As Boolean
        GetIsUserLoginCorrect(IsLoginIdCorrect, IsPasswordCorrect)

        If IsLoginIdCorrect And IsPasswordCorrect = True Then
            Me.Hide()
            ' User Information
            DeshBoard.MainUserIdLabel.Text = Me.MainUserIdLabel.Text
            DeshBoard.UserNameLabel.Text = Me.UserNameLabel.Text
            DeshBoard.UserLoginIdLabel.Text = Me.UserLoginIdLabel.Text
            DeshBoard.UserLevelLabel.Text = Me.UserLevelLabel.Text
            'Organanization Information
            DeshBoard.MainOrgIDLabel.Text = Me.MainOrgIDLabel.Text
            DeshBoard.OrgNameLabel.Text = Me.OrgNameLabel.Text
            DeshBoard.OrgTelLabel.Text = Me.OrgTelLabel.Text
            DeshBoard.OrgEmailLabel.Text = Me.OrgEmailLabel.Text
            DeshBoard.OrgAddressLabel.Text = Me.OrgAddressLabel.Text
            DeshBoard.Show()
        Else
            If IsLoginIdCorrect = False Then
                MessageBox.Show("Login ID is not correct...!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                LoginIDTextBox.Clear()
                PasswordTextBox.Clear()
                LoginIDTextBox.Focus()
            Else
                MessageBox.Show("Password ID is not correct...!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                PasswordTextBox.Clear()
                PasswordTextBox.Focus()
            End If
        End If

    Catch ex As ApplicationException
        MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Sub

非常感谢。

标签: sqlsql-servervb.netmethods

解决方案


您需要ByRef在 Sub 中添加两个参数GetIsUserLoginCorrect()。为了演示,请尝试以下使用和不使用ByRef.

Private Sub ChangeBoolean(ByRef TorF As Boolean)
    TorF = True
End Sub
Private Sub OPCode2()
    Dim TorF As Boolean
    ChangeBoolean(TorF)
    Debug.Print(TorF.ToString) ' Result False without ByRef in ChangeBoolean
    'When ByRef is added result is True
End Sub

推荐阅读