从C#中的存储过程中捕获错误

我有一个存储过程,用于在登录期间验证用户.
如果成功则返回用户实体,并且效果很好!我的问题是,如果它不起作用,我会在SP中引发错误,如何捕获此错误并以最佳方式使用它?现在我得到nullrefference,这是代码
存储程序:

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

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...