我有一个存储过程,用于在登录期间验证用户。
如果成功,它会返回用户实体,效果很好!我的问题是,如果它不起作用,我会在 SP 中提出错误,如何捕获此错误并以最佳方式使用它?现在我得到了 nullreference,这是代码:
存储流程:
ALTER PROCEDURE getEmployee
(
@username nvarchar(50),
@password nvarchar(50)
)
AS
DECLARE @Error_MSG nvarchar(50)
BEGIN
IF EXISTS (select * from Employee where eUsername = @username AND pword = @password)
begin
select * from Employee where eUsername = @username AND pword = @password
END
ELSE
BEGIN
SET @Error_MSG = 'Wrong password, or user doesnt exist'
RAISERROR (@Error_MSG, 11,1)
END
END
在代码中,它看起来像这样,SP是getEmployee
ActivityDatabaseDataContext dc = new ActivityDatabaseDataContext();
Employee emp;
public bool logIn(string piUsername, string piPassword)
{
try
{
emp = dc.getEmployee(piUsername, piPassword).Single();
}
catch (Exception ex)
{
errorMsg = ex.Message + ex.InnerException.Message;
}
if (emp != null)
{
AppHelper.AppHelper.setUser(emp);
return true;
}
else
{
return false;
}
我的问题是我应该如何处理异常?
我通常不会向 SP 提出错误,除非它实际上是操作的系统问题。输入错误的用户名和密码是一个用户问题,您只需要在界面级别处理这个问题,因此我会丢弃大部分 SP 并处理以下两个用例(返回 1 行或 0 行)业务层或接口代码。如果为 0 行,则向客户端抛出“错误的用户名或密码”消息,如果为 1,则登录。
ALTER PROCEDURE getEmployee
(
@username nvarchar(50),
@password nvarchar(50)
)
AS
BEGIN
select * from Employee where eUsername = @username AND pword = @password
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)