【发布时间】:2016-05-18 19:29:03
【问题描述】:
我是 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
感谢您的帮助
【问题讨论】:
-
那么,您是从表
LogIn中选择一些随机行,然后将其与传递的值进行比较,对吧? -
您的代码对我来说很好用。你确定你传入的参数正确吗?
-
嗨 Lashane,感谢您的及时回复,请看我下面的代码 SqlCommand comm = new SqlCommand("AuthenticateUser", MyConnection.MyConn("Open")); comm.CommandType = CommandType.StoredProcedure; comm.Parameters.Add("@UserName", SqlDbType.VarChar).Value = userName.Text; comm.Parameters.Add("@Password", SqlDbType.VarChar).Value = Password.Text; comm.Parameters.Add("@Role", SqlDbType.VarChar, 25); comm.Parameters["@Role"].Direction = ParameterDirection.Output; comm.ExecuteNonQuery(); employee.UserRole = (comm.Parameters["@Role"].Value).ToString();
-
顺便说一句,我会避免在数据库中存储任何应用程序的纯文本密码。我建议至少实施 SQL 级别的加密。 Simple talk 和 Database Journal 有关于如何实现这一点的文章。 databasejournal.com/features/mssql/article.php/3922881/…simple-talk.com/sql/t-sql-programming/…
标签: sql-server stored-procedures