我是sql的新手,我不确定我的存储过程有什么问题。
用户输入用户名&密码是我的输入参数,如果正确则返回'登录成功',如果UN不正确而不是返回'错误的UN'或者如果PW不正确则返回'错误的PW'。在存储过程中,我有一个IF Else语句,它只是命中第一个IF
语句而不是其他语句。
请查看我的存储过程:
CREATE PROCEDURE [dbo].[AuthenticateUser]
@UserName varchar(15),
@Password varchar(15),
@Role varchar(25) OUTPUT
AS
SET NOCOUNT ON
BEGIN
DECLARE @UN VARCHAR(25)
DECLARE @PW VARCHAR(25)
SELECT @UN = UserName, @PW = Password FROM LogIn
IF (@UN != @UserName COLLATE SQL_Latin1_General_CP1_CS_AS)
BEGIN
SET @Role = 'Incorrect User Name'
END
ELSE
BEGIN
IF (@PW != @Password COLLATE SQL_Latin1_General_CP1_CS_AS)
BEGIN
SET @Role = 'Incorrect Password'
END
ELSE
BEGIN
SET @Role = 'Logged in Successfully'
END
END
SELECT @Role
END
感谢您的帮助
答案 0 :(得分:0)
将其更改为SELECT COUNT(1)FROM userLogin ....然后在SqlDataReader对象上使用ExecuteScalar()。
作为旁注,将密码以明文形式存储在数据库中并不是一个好主意,而是将它们哈希,最好是使用盐值。
答案 1 :(得分:0)
你这样做:
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(linearLayoutManager) {
@Override
public void onLoadMore(int current_page) {
Log.d("SCROLL PAST UPDATE", "You hit me");
//maintain scroll position
int lastFirstVisiblePosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
((LinearLayoutManager) mRecyclerView.getLayoutManager()).scrollToPosition(lastFirstVisiblePosition);
loadMore(jsonSubreddit);
}
});
这些比较SELECT @UN = UserName, @PW = Password FROM LogIn
IF (@UN != @UserName COLLATE SQL_Latin1_General_CP1_CS_AS)
和@UN = UserName
应在@PW = Password
子句中进行,以帮助正确过滤行。
以下是重写的代码(您可以更改为使用自己的表名)
WHERE
最后提供的三个示例向您展示了当您为其提供良好的登录或任一参数不正确时该过程的行为。
答案 2 :(得分:0)
请改为尝试:
applications + license + lease AS GrandTotal
答案 3 :(得分:0)
一般来说,为攻击者提供一个提示并不是一个好主意,而且名称是可以的,现在猜测一下这个问题。#34;此外,密码至少应区分大小写。为此目的:
select @un=username from LogIn
where username=@username
and cast(password as varbinary(max)) = cast(@password as varbinary(max))
if @un is null
set @role = 'UN or PWD is incorrect'
else
set @role = 'Success'
如果您想提供提示:
select @un=username from LogIn
where username=@username
if @un is null
set @role = 'UN not found'
else
begin
select @un=username from LogIn
where username=@username
and cast(password as varbinary(max)) = cast(@password as varbinary(max))
if @un is null
set @role = 'password incorrect'
else
set @role = 'Success'
end
P.S。:我希望用户名在您的表中是唯一的。