我有一個存儲過程被調用來在登錄過程中驗證用戶。 如果成功,它將返回用戶實體,而且效果很好!我的問題是如果它不起作用,我會在SP中提出一個錯誤,我如何捕獲這個錯誤並以最好的方式使用它?現在我越來越nullrefference,這是代碼: 存儲過程:從C#中的存儲過程中捕捉錯誤#
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;
}
我的問題是我應該怎麼處理異常?
同意!這不是一個真正的「錯誤」,它肯定不應該從數據庫中提出。 – 2010-10-21 17:50:37
是的,你是對的,這不是一個錯誤,所以我應該改變它,但我應該怎麼樣才能保證SP,如果成功,我仍然想從數據庫中返回完整的實體,但如果沒有,我們應該說0我改變我的SP? /謝謝 – Fore 2010-10-21 19:13:58
從上面的過程中,你應該能夠檢查返回的值,看看它包含了多少項。如果它是空集,則知道用戶名/密碼存在問題。如果它有一個項目,他們很好登錄,如果有多個項目(假設你覺得強迫症需要檢查,因爲數據庫應該確保這種情況),那麼存在一個嚴重的問題:-) – Kendrick 2010-10-21 19:26:32