2017-10-12 8 views
1

次のストアド・プロシージャは、3つの文字列とテーブル行の結果を出力として表示します。 エンティティフレームワークを使用して、mvcビューの出力パネルにすべての結果を表示する方法はありますか?エンティティ・フレームワークを使用してストアド・プロシージャから複数の文字列出力を取得

以下のコードで最初の文字列の結果を確認できました。しかし、他の2つの選択文字列出力を取得して、テーブル行の結果を にするにはどうにもなりません。

private CustomerEntities db = new CustomerEntities(); 
     public ActionResult Index() 
     { 
      var results = db.usp_CustomerData("124544", 1500); 
      var abc = results.ToList(); 
      return View(); 
     } 

ALTER PROCEDURE [dbo].[usp_CustomerData] 
@CustomerID varchar(6), 
@MinsBack int 
AS 
BEGIN 

    DECLARE @Count int 
    SET @Count = (SELECT Count(*) 
        FROM Customer WITH (NOLOCK) 
        WHERE CustomerID = @CustomerID AND      
          DATEDIFF(mi, ReceivedAt, GETUTCDATE()) < @MinsBack) 
    IF (@Count = 1) 
     SELECT 'Ok: 1 message in Customer table' 
    ELSE 
     SELECT 'ERROR: Expected 1 message in Customer table, but found ' + CONVERT(varchar(3), @Count) + ' messages.' 


    SET @Count = (SELECT Count(*) 
        FROM CustomerDetails WITH (NOLOCK) 
        WHERE CustomerID = @CustomerID AND 
          DATEDIFF(mi, LastUpdatedAt, GETDATE()) < @MinsBack) 
    IF (@Count = 1) 
     SELECT 'Ok: 1 record in CustomerDetails table' 
    ELSE 
     SELECT 'ERROR: Expected 1 record in CustomerDetails table, but found ' + CONVERT(varchar(3), @Count) + ' records.' 


    SET @Count = (SELECT Count(*) 
        FROM CustomerProduct WITH (NOLOCK) 
        WHERE CustomerID = @CustomerID AND 
          DATEDIFF(mi, LastUpdatedAt, GETDATE()) < @MinsBack) 
    IF (@Count = 1) 
     SELECT 'Ok: 1 record in CustomerProduct table' 
    ELSE 
     SELECT 'ERROR: Expected 1 record in CustomerProduct table, but found ' + CONVERT(varchar(3), @Count) + ' records.' 

    SELECT *FROM Customer where customerID = @CustomerID 

END 

答えて

1

一時的なストアとして使用されるSQLスクリプトに一時テーブルを作成することもできます。代わりに、直接各IFSELECTかの

CREATE TABLE #Results 
(
    Message VARCHAR(512) 
) 

ELSEあなたは一時テーブルに文字列を挿入する必要があります。 終わりに次の方法でそれらを返すために、すべての挿入文字列を取得するためにあなたの目標に達する可能性:顧客を取得するには

SELECT * FROM #Results 

- あなたが最後に行うように - あなたは、データベースに新しいクエリをトリガする必要があります。

場合によっては、ストア・プロシージャーによってデータベースに照会するのではなく、データ・コンテキストでデータベースを照会することを検討する必要があります。

1

あなたはこのlinkに提案するような何かを行う必要があるが、私は、それぞれの結果は、あなたが)(reader.NextResultを行う必要があります設定について

以下に要約しました。

var someReturnObject = new ResultObject(); 

using (var context = new LinqPadDbContext(@"Server=localhost\SQLEXPRESS;Database=StackOverflow;Trusted_Connection=True;")) 
{ 
    var cmd = context.Database.Connection.CreateCommand(); 
    cmd.CommandText = "[dbo].[GetSomeData]"; 

    try 
    {   
     context.Database.Connection.Open(); 

     var reader = cmd.ExecuteReader(); 

     var result1 = ((IObjectContextAdapter)context).ObjectContext.Translate<string>(reader); 

     someResultObject.Text1 = result1.First(); 

     //for each extra result, start here 
     reader.NextResult(); 

     var users = ((IObjectContextAdapter)context).ObjectContext.Translate<User>(reader); 

     someResultObject.Users = users.Select(x => x); 
     //stop here 
    } 
    finally 
    { 
     context.Database.Connection.Close(); 
    } 
} 
+0

他の回答と組み合わせて、2つの出力のみを処理する必要があります。 –

関連する問題