2010-10-21 2 views
4

Я сейчас работаю над проектом, где мы должны реализовать все коммуникации в базе данных с помощью хранимых процедур. Мы используем Linq-to-SQL, поэтому все объекты базы данных находятся на своем месте. Мой вопрос заключается в том, как вы можете написать хранимую процедуру, которая возвращает объект, если это возможно.Хранимая процедура SQL Server и Linq-to-SQL

Пример: мы проверяем пользователя, когда он регистрируется с именем пользователя и передает его, а затем выполняет проверку, но как мне написать, чтобы вернуть хранимую процедуру для возврата объекта Employee?

CREATE PROCEDURE GetLogin (
    @UserName NVARCHAR(50), 
    @Password NVARCHAR(50)) 
+0

Я не думаю, что это возможно. – AlexanderMP

+0

@ Александр: уверен, что это - см. Мой ответ ... –

ответ

4

Что делает ваша GetLogin процедура и/или возврат?

При добавлении хранимой процедуры в контекст данных Linq-to-SQL вы можете указать «тип возврата» в окне свойств - если вы уверены, что ваша хранимая процедура возвращает все свойства, которые составляют a User, тогда вы можете установить тип возвращаемого файла, который хранится в файле User, и тогда это должно сработать.

В этом случае ваш код будет выглядеть примерно так:

User found = ctx.GetLogin("YourUserName", "TOP$SECRET").SingleOrDefault(); 

Если пользователь был найден в базе данных, found будет содержать что пользователь - в противном случае, это будет NULL.

Обновление:, если у вас есть такой объект User, вы можете использовать его, как и любой другой объект Linq-to-SQL!

Вы можете изменить свойства:

found.UserName = "New User Name"; 
ctx.SubmitChanges(); 

или вы можете удалить его:

ctx.Users.DeleteOnSubmit(found); 
ctx.SubmitChanges(); 

Объект вы получаете обратно объект Linq к SQL так же, как любой другой!

+0

Здравствуйте, спасибо за помощь! Он работал как прелесть, когда я менял его, чтобы возвращать пользователей, так что теперь он обновляет список, и я просто выбираю первый. Но если я не уверен, что я получу взамен, как мне наилучшим образом взаимодействовать с этими данными? Например, если я хочу вернуть пользователя, как указано выше, но есть ошибка, и я хочу, чтобы процедура возвращала строку с сообщением об ошибке, как мне ее обрабатывать? // Thanks – Fore

+0

@Fore: в этом случае выведите исключение с этим сообщением об ошибке и в своем приложении поймайте исключение и сообщите об ошибке пользователю (что-то вроде «пользователь не найден») - это стандартный способ .NET делать так, как это –

+0

нормально, поэтому, как только у меня есть этот пользователь, могу ли я его отредактировать или удалить из базы данных, не прибегая к поиску базы данных? Я имею в виду, как он знает, что это действительно действительный пользователь из базы данных? Что делать, если я передаю данные в той же форме, но таких данных на самом деле не существует в базе данных? В этом случае это больше не будет реальной сущностью, а простой структурой данных с нулевой функциональностью (именно это вы получаете от SP в LINQ to SQL). Вот что я имел в виду в вышеупомянутом комментарии. – AlexanderMP

Смежные вопросы