簡體   English   中英

使用實體框架從存儲過程中獲取多個字符串輸出

[英]get multiple string outputs from stored procedure using entity framework

以下存儲過程顯示三個字符串和一個表行結果作為輸出。 有什么方法可以使用實體框架在mvc視圖輸出面板上顯示所有結果?

我可以在下面的代碼中看到第一個字符串的結果。 但是無論如何,都可以獲得其他兩個選擇字符串輸出和表行結果。

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

作為建議,您可以在SQL腳本中創建一個臨時表,該表將用作臨時存儲。

CREATE TABLE #Results
(
    Message VARCHAR(512)
)

代替在每個IFELSE直接SELECT ,您應該將字符串插入到臨時表中。 最后,您可以達到目標,通過以下方式獲取所有插入的字符串以返回它們:

SELECT * FROM #Results

為了獲得客戶(就像最后一樣),您應該觸發對數據庫的新查詢。

根據您的情況,您應該考慮通過數據上下文查詢數據庫,而不是通過存儲過程查詢數據庫。

您需要執行此鏈接中建議的操作,但我在下面總結了

對於每個結果集,您需要做一個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();
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM