2015-08-17 92 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; 
     } 
    }