2016-10-28 11 views
1

私はこのようになりますストアドプロシージャがあります。Entity Frameworkの - グラブストアドプロシージャの結果

ALTER PROCEDURE [dbo].[myProc] 
    @sampleParam1 VARCHAR (10) 
AS  
    DECLARE @AccountID INT  

    --some business logic that evaluates value of @AccountID  
    SELECT @AccountID --I want to grab this value in .Net application. 

を私はこのような.NETを使用してこのストアドプロシージャを実行しています:

class MyResult 
{ 
    public int AccountID { get; set; } 
} 

public void myfun() 
{ 
     myEntitesEntites = new MyEntites();//Using EF6 

     var result = myEntitesEntites.Database.SqlQuery<MyResult> 
    ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028")) 
} 

私はresult.AccountIDを期待していましたストアドプロシージャに最後のSELECT @AccountIDステートメントの値が保持されます。しかしresult.AccountIDは常に0です。

:私はSSMSから同じストアドプロシージャを実行していたとき、私は0

ない@AccountIDの実際の値を見ることができる私は何も足りませんか?

ありがとうございます。

答えて

3
  1. 変更ストアドプロシージャの結果、ストアドプロシージャから列の

    CREATE PROCEDURE [dbo].[myProc] 
        @sampleParam1 VARCHAR (10) 
    AS  
        DECLARE @AccountID INT = @sampleParam1 
        --some business logic that evaluates value of @AccountID  
        SELECT @AccountID as AccountID --I want to grab this value in .Net application. 
    
    public void myfun() 
    { 
        myEntitesEntites = new MyEntites();//Using EF6 
    
        var result = myEntitesEntites.Database.SqlQuery<MyResult> 
    ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028")) 
    } 
    

    名は、オブジェクトのプロパティと同じ名前で一致している必要があります。

  2. あなたはint型に戻りパラメータの種類を変更することができます例えばだからint

を返し[dbo].[myProc]あなたの手順。この場合、メソッドSqlQueryはストアドプロシージャから正しい値@AccountIDを返します。

public MyResult myfun() 
    { 
     myEntitesEntites = new MyEntites();//Using EF6 

     int accountID = myEntitesEntites.Database.SqlQuery<int> 
    ("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028")) 
     return new MyResult() 
        { 
         AccountID = accountID 
        } 
    } 
+0

ビンゴ@Alexcei Shmakov。ありがとう。 – user2243747

+0

こんにちは、複数の列を取得するにはどうしたらいいですか?ストアドプロシージャの最後の行が 'SELECT @ Field1、@ Field2'だった場合のように?私は 'Field1'と 'Field2'という名前の2つのフィールドを持つクラスを作成する必要がありますか?私はそれをやってみたが働いていなかった。 – user2243747

+0

あなたから提案されたようにSPを修正した後、それは機能しました!しかし、残念ながら私は既にいくつかのクライアントによって使用されているSPを変更することはできませんので、他の回避策を見つける必要があります。ご協力いただきありがとうございます。 – user2243747

関連する問題