Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我正在使用一个带有存储过程的方法,但它';It’他总是说假话_Sql_Sql Server_Vb.net_Methods - Fatal编程技术网

Sql 我正在使用一个带有存储过程的方法,但它';It’他总是说假话

Sql 我正在使用一个带有存储过程的方法,但它';It’他总是说假话,sql,sql-server,vb.net,methods,Sql,Sql Server,Vb.net,Methods,我在Visual Studio 2015和SQL Server 2005中使用bool方法 当我传递正确的详细信息并单击登录按钮时,代码总是从存储过程返回false 这是我在SQL Server 2005中的存储过程: ALTER PROCEDURE [dbo].[UserCheckLoginDetails] (@IsLoginIdCorrect BIT OUTPUT, @IsPasswordCorrect BIT OUTPUT, @LoginID NVARCHAR(

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

当我传递正确的详细信息并单击登录按钮时,代码总是从存储过程返回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
这是我返回
True
False
的方法:

Private子GetIsUserLoginCorrect(IsLoginIdCorrect为布尔值,IsPasswordCorrect为布尔值)
将Conn用作新的SqlConnection(_SqlCon)
使用cmd作为新的SqlCommand(“UserCheckLoginDetails”,Conn)
cmd.CommandType=CommandType.storedProcess
康涅狄格州公开赛
'输出参数
cmd.Parameters.Add(“@IsLoginIdCorrect”,SqlDbType.Bit).Direction=ParameterDirection.Output
cmd.Parameters.Add(“@IsPasswordCorrect”,SqlDbType.Bit).Direction=ParameterDirection.Output
'输入参数
cmd.Parameters.AddWithValue(“@LoginID”,LoginIDTextBox.Text)
cmd.Parameters.AddWithValue(“@Password”,PasswordTextBox.Text)
cmd.ExecuteNonQuery()
'分配参数
IsLoginIdCorrect=Convert.ToBoolean(cmd.Parameters(“@IsLoginIdCorrect”).Value)
IsPasswordCorrect=Convert.ToBoolean(cmd.Parameters(“@IsPasswordCorrect”).Value)
终端使用
终端使用
端接头
这是登录按钮单击事件处理程序,即使我提供了正确的值,它仍然始终返回false:

Private子登录按钮\u单击(发送者作为对象,e作为事件参数)处理登录按钮。单击
尝试
Dim IsLoginIdCorrect,IsPasswordCorrect为布尔值
GetIsUserLoginCorrect(IsLoginIdCorrect、IsPasswordCorrect)
如果IsLoginIdCorrect和IsPasswordCorrect=True,则
我躲起来
'用户信息
DeshBoard.MainUserIdLabel.Text=Me.MainUserIdLabel.Text
DeshBoard.usernamelab.Text=Me.usernamelab.Text
DeshBoard.UserLoginIdLabel.Text=Me.UserLoginIdLabel.Text
DeshBoard.UserLevelLabel.Text=Me.UserLevelLabel.Text
"组织信息",
DeshBoard.MainOrgIDLabel.Text=Me.MainOrgIDLabel.Text
DeshBoard.orgnamelab.Text=Me.orgnamelab.Text
DeshBoard.OrgTelLabel.Text=Me.OrgTelLabel.Text
DeshBoard.orgeEmailLabel.Text=Me.orgeEmailLabel.Text
DeshBoard.OrgAddressLabel.Text=Me.OrgAddressLabel.Text
DeshBoard.Show()
其他的
如果IsLoginIdCorrect=False,则
显示(“登录ID不正确…!!”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error)
LoginIDTextBox.Clear()
PasswordTextBox.Clear()
LoginIDTextBox.Focus()
其他的
显示(“密码ID不正确…!!”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error)
PasswordTextBox.Clear()
PasswordTextBox.Focus()
如果结束
如果结束
Catch ex作为ApplicationException
MessageBox.Show(“错误:”+例如消息,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error)
结束尝试
端接头

非常感谢。

您需要将
ByRef
添加到Sub
GetIsUserLoginCorrect()
中的两个参数中。 要进行演示,请在使用和不使用
ByRef
的情况下尝试以下操作

Private-Sub-ChangeBoolean(ByRef-TorF为Boolean)
TorF=真
端接头
专用子操作码2()
Dim TorF为布尔型
更改布尔值(TorF)
Debug.Print(TorF.ToString)的结果为False,ChangeBoolean中没有ByRef
'添加ByRef后,结果为True
端接头

您需要将
ByRef
添加到Sub
GetIsUserLoginCorrect()
中的两个参数中。 要进行演示,请在使用和不使用
ByRef
的情况下尝试以下操作

Private-Sub-ChangeBoolean(ByRef-TorF为Boolean)
TorF=真
端接头
专用子操作码2()
Dim TorF为布尔型
更改布尔值(TorF)
Debug.Print(TorF.ToString)的结果为False,ChangeBoolean中没有ByRef
'添加ByRef后,结果为True
端接头

首先,方法可以引用sub或函数。sub是执行操作的方法。函数是计算或检索一个或多个值的方法

sub不应称为Getxxx,因为它的主要用途不应是返回值

应使用函数返回值。由于您试图检索多个值,如果您使用2017,我建议返回一个包含两个值的命名元组,因为您没有,我将创建一个包含这些值的对象并返回该值


在一个完全不同的注释中,你真的不能区分正确的用户错误的密码和错误的用户正确的密码和错误的用户错误的密码-所以你不应该告诉别人你可以。您只需说登录不成功或用户名/密码组合无效。

首先,方法可以引用sub或函数。sub是执行操作的方法。函数是计算或检索一个或多个值的方法

sub不应称为Getxxx,因为它的主要用途不应是返回值

应使用函数返回值。由于您试图检索多个值,如果您使用2017,我建议返回一个包含两个值的命名元组,因为您没有,我将创建一个包含这些值的对象并返回该值


在一个完全不同的注释中,你真的不能区分正确的用户错误的密码和错误的用户正确的密码和错误的用户错误的密码-所以你不应该告诉别人你可以。您只是说登录不成功或用户名/密码组合无效。

您的代码有很多错误。

首先,我们为什么要这样做
Dim IsLoginIdCorrect, IsPasswordCorrect As Boolean
GetIsUserLoginCorrect(IsLoginIdCorrect, IsPasswordCorrect)
If IsLoginIdCorrect And IsPasswordCorrect = True Then
 If (IsLoginIdCorrect = True AndAlso IsPasswordCorrect = True) Then
Dim cmd = New SqlCommand("SELECT COUNT(*) FROM UserInfo 
           WHERE loginid = @LoginID AND password = @Password")
Dim Exists = Convert.ToInt32(cmd.ExecuteScalar)
If Exists = 1 Then
''Code if data exists
End if
Private Function GetIsUserLoginCorrect(IsLoginIdCorrect As Boolean, IsPasswordCorrect As Boolean) As Tuple(of Boolean, Boolean)
....
....
return Tuple.Create(IsLoginIdCorrect, IsPasswordCorrect)
End Sub
 Dim IsLoginCorrect = GetIsUserLoginCorrect(first_boolean_variable,second_boolean_variable).Item1

  Dim IsPasswordCorrect = GetIsUserLoginCorrect(first_boolean_variable,second_boolean_variable).Item2