У меня есть хранимая процедура, которая вызывается для проверки пользователя во время входа в систему. Если успех возвращает пользовательский объект, и это работает хорошо! Мой вопрос в том, что если это не сработает, я вызову ошибку в 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
И в коде это выглядит так, СП является 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, я все равно хочу вернуть полную сущность из db, если успех, но скажем 0, если ничего, как следует Я меняю свой SP?/Thanks – Fore
Из вышеперечисленного proc вы можете проверить возвращаемое значение, чтобы увидеть, сколько его элементов содержит. Если это пустой набор, вы знаете, что есть проблема с именем пользователя/паролем. Если в нем есть 1 элемент, они могут войти в систему, и если есть несколько элементов (если вы считаете, что OCD необходимо проверить, так как БД должна обеспечить этот случай), тогда возникает серьезная проблема :-) – Kendrick