2015-08-17 47 views
0

的结果,我创建了返回问题的基础上,输入文本无法获取存储过程

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

    SELECT QuestionID 
    FROM dbo.Questions 
    WHERE Tekst = @Tekst 

    RETURN @QuestionID 

ID的程序,我在得到QuestionID值的问题:

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

回答

2

使@QuestionIDOutput参数。还需要将结果分配给@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; 

如果使用实体框架,你可以使用这个变体:

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; 
     } 
    }