2015-08-17 4 views
0

Я создал процедуру, которая возвращает идентификатор вопроса на основе ввода текстаНе удалось получить результат хранимой процедуры

ALTER PROCEDURE [dbo].[GetQuestionIDbyTekst] 
(
    @Tekst nvarchar(100) 
) 
AS 
    DECLARE @QuestionID int 

    SELECT QuestionID 
    FROM dbo.Questions 
    WHERE Tekst = @Tekst 

    RETURN @QuestionID 

и у меня есть проблемы в получении значения QuestionID:

public static int getQuestionID(Question p) 
{ 
     using (Entities dm = new Entities()) 
     { 
      return dm.GetQuestionIDbyTekst(p.Tekst);   
     } 
} 

ответ

2

Сделать @QuestionID как Output параметр. Кроме того, необходимо присвоить результат @QuestionID

ALTER PROCEDURE [dbo].[GetQuestionIDbyTekst] 
(
    @Tekst nvarchar(100), 
    @QuestionID INT OUTPUT 
) 
AS 
BEGIN 
DECLARE @QuestionID int 
SELECT @QuestionID = QuestionID FROM dbo.Questions WHERE Tekst = @Tekst 
END 
0

пожалуйста, попробуйте следующее:

ALTER PROCEDURE [dbo].[GetQuestionIDbyTekst] 
(
    @Tekst nvarchar(100) 
) 
AS 
    -- DECLARE @QuestionID int 

    SELECT QuestionID 
    FROM dbo.Questions 
    WHERE Tekst = @Tekst 

    -- RETURN @QuestionID 
+0

Хотя этот код может ответьте на вопрос, было бы лучше включить какой-то контекст, объяснить, как он работает, и описать, когда его использовать. Ответы только на код не полезны в долгосрочной перспективе. – ryanyuyu

0

Вы можете использовать свой вариант хранимой процедуры.

И если вы используете ADO.NET и хотите получить возвращаемое значение, попробуйте следующее:

SqlConnection con = new SqlConnection(@"Data Source=localhost\***;Initial Catalog=***;Integrated Security=True;Persist Security Info=False;"); 
con.Open(); 

SqlCommand cmd = new SqlCommand("GetQuestionIDbyTekst", con); 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 

cmd.Parameters.Add("@Tekst", System.Data.SqlDbType.NVarChar).Value = "eee"; 

SqlParameter returnPar = new SqlParameter(); 
returnPar.Direction = ParameterDirection.ReturnValue; 
cmd.Parameters.Add(retturnPar); 

cmd.ExecuteScalar(); 
var result = returnPar.Value; 

Если вы используете Entity Framework, вы можете использовать этот вариант:

public static int GetQuestionIDbyTekst(string question) 
    { 
     using (var context = new EfDbContext()) 
     { 
      var test = new SqlParameter("@Tekst", question); 

      var resultParam = new SqlParameter("@result", SqlDbType.Int); 
      resultParam.Direction = ParameterDirection.Output; 

      context.Database.ExecuteSqlCommand("exec @result = [dbo].[testProc] @Tekst", resultParam, test); 
      return (int)resultParam.Value; 
     } 
    } 
Смежные вопросы