Хранимая процедура Sql Server возвращает -1

#sql-server #linq #stored-procedures #parameters #output

#sql-сервер #linq #хранимые процедуры #параметры #вывод

Вопрос:

Я пишу код на entity Framework 6.0, linq на asp.net , платформа sql Server.

Я написал хранимую процедуру, которая должна возвращать выходное значение (0 или 1)

Сначала я написал SP, используя выходной параметр следующим образом:

 ALTER proc [dbo].[checkUser]
(
    @oNo int,
    @pw varchar(50),
    @val int output
)
as
begin
    if EXISTS (select * from Users where @oNo=sNo and @pw=password)
        begin
        set @val=1
        end
    if not exists(select * from Users where @oNo=sNo and @pw=password)
        begin
        set @val=0
        end

end
  

Не сработало. Оно вернуло значение -1. Затем я изменил SP следующим образом:

 ALTER proc [dbo].[checkUser]
(
    @oNo int,
    @pw varchar(50)
)
as
begin
    if EXISTS (select * from Users where @oNo=sNo and @pw=password)
        begin
        return 1
        end
    else
        begin
        return 0
        end

end
  

Хранимая процедура каждого способа возвращает только -1

Не могли бы вы мне помочь, пожалуйста, где я делаю неправильно?

Комментарии:

1. Вывод параметра объекта = новый параметр объекта(«val», typeof(int)); переменная d = context.CheckUser(преобразовать. ToInt32(txtONo.Text), txtPw.Text, вывод); переменная d=context.CheckUser(преобразовать. ToInt32(txtONo.Text),txtPw.Text); if (d==1) { // } else if(d==0) { // }

2. вы используете импорт функции?

3. Ну, я сопоставил базу данных с entity Framework. Итак, хранимая процедура, которую я написал на стороне sql, существует в function import с тем же именем, что и на стороне sql; называется ‘CheckUser’.

4. К сожалению, код был таким: ObjectParameter output = новый ObjectParameter(«val», typeof(int)); переменная d = context.CheckUser(Преобразовать. ToInt32(txtONo.Text), txtPw.Text, вывод); if (d==1) { // } else if(d==0) { // }

Ответ №1:

Попробуйте заменить «return» на «select».

 if EXISTS (select * from Users where @oNo=sNo and @pw=password)
    begin
    select 1
    end
else
    begin
    select 0
    end
  

Комментарии:

1. Только что пробовал. Странно, что таким образом она возвращает только «0». Хотя я пробовал как истинные, так и неправильные совпадения параметров для sp..