簡體   English   中英

如何在MVC / EF / LINQ中執行存儲過程並獲取返回結果

[英]How to execute stored procedure and get return result in MVC/EF/LINQ

誰能指導我如何在ASP.NET MVC / EF中執行SQL Server存儲過程
申請並獲得結果?

SQL Server存儲過程

 CREATE PROCEDURE dbo.StoredProcedure2 AS
     declare @parameter2 int
     SET @parameter2 = 4

     RETURN @parameter2 

MVC代碼

 private readonly TestDatastoreContext _context = new TestDatastoreContext();

 public ViewResult Index(string id)
 {
        ViewData["EnvironmentId"] = id;

        using (_context)
        {
            _context.Database.Connection.Open();
            var command = _context.Database.Connection.CreateCommand();
            command.CommandText = "dbo.StoredProcedure2";
            command.CommandType = System.Data.CommandType.StoredProcedure;
            var test = (command.ExecuteScalar());
        }

        var bigView = new BigViewModel
        {
            VersionsModel = _context.Versions.ToList(),
            EnvironmentViewModel = _context.Environments.ToList(),
        };

        return View(model: bigView);
}

您的問題是這樣的:您正在從存儲過程返回值(使用RETURN @paramter2 ),但是您的.NET代碼正在嘗試讀取結果集; 使用存儲過程中的SELECT .....語句將“返回”的內容

因此,將存儲過程更改為此:

CREATE PROCEDURE dbo.StoredProcedure2 AS
     declare @parameter2 int
     SET @parameter2 = 4

     SELECT @parameter2 

然后您的.NET代碼應該可以正常工作。

RETURN語句應僅用於狀態碼 ,並且只能返回INT值。 如果要使用它,則必須使用Direction.ReturnValue為存儲過程定義一個SqlParameter

查看此官方文檔,了解如何將Stored Procedure映射到您的上下文:

實體框架中的存儲過程

映射之后,您將可以通過以下方式調用Stored Procedure

var val = _context.StoredProcedure2();

一種選擇是簡單地做到這一點:

MyReturnEntity ret = context.Database
         .SqlQuery<MyReturnEntity>("exec myStoredProc ?, ?", param1, parm2);

您可以使用此庫: https : //github.com/mrmmins/C-StoreProcedureModelBinding

以列表的形式返回值,您只需要創建一個具有名稱和值類型的簡單類,例如:

var productos = DataReaderT.ReadStoredProceadures<MyCustomModel>(myDbEntityInstance, "dbo.MySPName", _generic);

和MyCumtomModel類類似:

public int id {get; set;}
public int salary {get; set;}
public string name {get; set;}
public string school {get; set;}

和通用的一樣:

List<Generic> _generic = = new List<Generic>
                          {
                              new Generic
                                  {
                                      Key = "@phase", Type = SqlDbType.Int, Value = "207"
                                  }
                          }
                      };

現在,您的products具有以下選項: products.First()products.Count()foreach等。

暫無
暫無

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

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