sql - 我正在使用带有存储过程的方法,但它总是返回 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
这是我的方法返回True
或False
:
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
非常感谢。
解决方案
您需要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
推荐阅读
- spring-boot - 带有 url 模式的端点的招摇文档
- reactjs - 无法从“node_modules/react-navigation-stack/lib/module/index.js”解析“./vendor/TransitionConfigs/CardStyleInterpolators”
- zen-cart - 在zenkart中集成razorpay支付模块
- excel - 将变量设置为值会产生运行时错误 1004:应用程序定义或对象定义错误
- java - java中的时间戳验证器
- hadoop - MapReduce 主进程如何决定将哪个任务分配给单个工作进程?
- lua - 我的代码在 Minecraft 中的计算机控制的种子分析器上给出了“尝试调用零值”
- node.js - AWS Lambda 数据库连接问题 [更新问题]
- android - mvvm + 实时数据,由于以前的实时数据值重新加载相同的片段
- python - Docker:如何调试本地主机“内部服务器错误”?