wake-up-neo.net

So führen Sie die gespeicherte Prozedur aus und erhalten ein Ergebnis in MVC/EF/LINQ

Könnte mir eine Anleitung geben, wie eine in SQL Server gespeicherte Prozedur in ASP.NET MVC/EF ausgeführt wird
Anwendung und Ergebnisse zurückbekommen?

Gespeicherte SQL Server-Prozedur  

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

     RETURN @parameter2 

MVC-Code

 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);
}
9
user845405

Ihr Problem ist folgendes: Sie geben den Wert aus der gespeicherten Prozedur zurück (mit RETURN @paramter2), aber Ihr .NET-Code versucht, eine Ergebnismenge zu lesen. etwas, das mit einer SELECT .....-Anweisung in der gespeicherten Prozedur "zurückgegeben" wird

Ändern Sie also Ihre gespeicherte Prozedur folgendermaßen:

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

     SELECT @parameter2 

und dann sollte Ihr .NET-Code gut funktionieren. 

Die RETURN-Anweisung sollte nur für status codes verwendet werden und kann nur INT-Werte zurückgeben. Wenn Sie dies verwenden möchten, müssen Sie eine SqlParameter für Ihre gespeicherte Prozedur mit einem Direction.ReturnValue definieren. 

9
marc_s

In diesem offiziellen Dokument erfahren Sie, wie Sie den Stored Procedure Ihrem Kontext zuordnen können:

Gespeicherte Prozeduren im Entity Framework

Nach dem Mapping können Sie den Stored Procedure folgendermaßen aufrufen:

var val = _context.StoredProcedure2();
4

Eine Möglichkeit ist, dies einfach zu tun:

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

Sie können diese Bibliothek verwenden: https://github.com/mrmmins/C-StoreProcedureModelBinding

Gibt die Werte als Liste zurück. Sie müssen lediglich eine einfache Klasse mit den Namen- und Wertetypen erstellen, z.

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

und MyCumtomModel-Klasse ist so etwas wie:

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

und generisch wie:

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

Und jetzt hat Ihre products die folgenden Optionen: products.First(), products.Count(), foreach usw.

0
MrMins